From 262110a4bae9b462c09f48575024b1823733dd69 Mon Sep 17 00:00:00 2001 From: Sachin Date: Tue, 20 Jun 2017 09:57:38 -0700 Subject: [PATCH 01/10] Adde new splash page --- assets/global-caching.png | Bin 0 -> 6982 bytes assets/insight.png | Bin 0 -> 5331 bytes assets/security.png | Bin 0 -> 4339 bytes assets/web-optimization.png | Bin 0 -> 2196 bytes lang/en.js | 15 +- .../BenefitsFeature/BenefitsFeature.js | 52 +++ .../GradientBanner/GradientBanner.js | 19 + src/containers/App/App.js | 81 ++-- .../BenefitsCollection/BenefitsCollection.js | 75 ++++ src/containers/Header/Header.js | 4 +- src/containers/LoginPage/LoginPage.js | 49 +-- src/containers/SplashPage/SplashPage.js | 135 +++++++ src/routes.js | 3 +- src/selectors/generateChannelLink.js | 27 ++ src/test/_helpers/createMockStore.js | 5 + src/test/components/BenefitsFeatureTest.js | 16 + src/test/components/GradientBannerTest.js | 24 ++ .../__snapshots__/BenefitsFeatureTest.js.snap | 51 +++ .../__snapshots__/GradientBannerTest.js.snap | 7 + src/test/containers/SplashPageTest.js | 50 +++ .../__snapshots__/SplashPageTest.js.snap | 371 ++++++++++++++++++ src/test/selectors/generateChannelLinkTest.js | 16 + stylesheets/components.css | 2 +- 23 files changed, 941 insertions(+), 61 deletions(-) create mode 100644 assets/global-caching.png create mode 100644 assets/insight.png create mode 100644 assets/security.png create mode 100644 assets/web-optimization.png create mode 100644 src/components/BenefitsFeature/BenefitsFeature.js create mode 100644 src/components/GradientBanner/GradientBanner.js create mode 100644 src/containers/BenefitsCollection/BenefitsCollection.js create mode 100644 src/containers/SplashPage/SplashPage.js create mode 100644 src/selectors/generateChannelLink.js create mode 100644 src/test/_helpers/createMockStore.js create mode 100644 src/test/components/BenefitsFeatureTest.js create mode 100644 src/test/components/GradientBannerTest.js create mode 100644 src/test/components/__snapshots__/BenefitsFeatureTest.js.snap create mode 100644 src/test/components/__snapshots__/GradientBannerTest.js.snap create mode 100644 src/test/containers/SplashPageTest.js create mode 100644 src/test/containers/__snapshots__/SplashPageTest.js.snap create mode 100644 src/test/selectors/generateChannelLinkTest.js diff --git a/assets/global-caching.png b/assets/global-caching.png new file mode 100644 index 0000000000000000000000000000000000000000..4b0af3c55bb49da972b10ada6340676c361f5bf3 GIT binary patch literal 6982 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 Js8O~E|39q`nTY@Z literal 0 HcmV?d00001 diff --git a/assets/insight.png b/assets/insight.png new file mode 100644 index 0000000000000000000000000000000000000000..cfb0d5d737dc3829df98009c32f706ab917d913e GIT binary patch literal 5331 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 Uw5ejs_E!-^Rad3*x$W!!0njr!00000 literal 0 HcmV?d00001 diff --git a/assets/security.png b/assets/security.png new file mode 100644 index 0000000000000000000000000000000000000000..a9095951be5f9d7d5d7fbbe6f762348b4fd50848 GIT binary patch literal 4339 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 literal 0 HcmV?d00001 diff --git a/assets/web-optimization.png b/assets/web-optimization.png new file mode 100644 index 0000000000000000000000000000000000000000..9b4bce4ad98067e83a69d097de413f03e654a016 GIT binary patch literal 2196 zcmbVNi&v7_7RS0pHPP0&zw|5Ecym9vzjE+H1h$z zTHefQFmrNJ6twFKQZh2_mKpeA2&pO3kQYn????Z^z292r`<=DU+55N8-oJegJu*Dd zXzTY|VKA6ca1i!5giHFdWi#~mUh>=n!LEG&xcn2u^n3~-FAe6KN=#0(4$dZIq#aKq zqyi*CnimYV<)>h*Z`ApBi&GKhV(j)J(u7ONWpn9L!JrKiBg z=Lg-_`KtP%z&H=uvN=sVkB%i4d{RU!hgQdPkNPf+p7OA&L`Q6Dt7$`WIMjl%wTlBT zZz8J;WOOfz7Pat!VC+O18{nD&^irKn*eXXkcfMFeM21US2tX|Jq$}xSaaW?V6S3kX zgB_O$-gOl6HpL?Lag$paY#+fSksktWd4A(08w8$kS;}e-7jup zVry#IKD~lGH(;vBpqJL&t2*yTTG2mF-nece*}^+-3em>i1=7G5bcd(iEYPaab`- zy5YWUK@j`SqadBj^LJ1+Jal(atCTipPiIV=k0>l-yQg%5Z;gIivsj$JKQ-eE95Nj7OgZ6~ z)?T+RJn0<^7PhK$07ePhn&=NWs7!0Qjl)!3pY2E}PE}KdnRq)eg5_BRgPBPHjp0V3 zgWoCu*VM6X{5}MT9;WHT^^i>U^}Fd44mim0o+fuz!ym;#b$$9BLlBCqpa_FfA_2N6GA=khbH-g#u?zC|Kltg+^X>Ndk)7+X^Gn_6rc7;;oFub ztS?`Mmu}8IHSqPZ>aG^OeNxBF2IR%$?#Fj5c=+c-oS{Z(#_GYYj2md?vqdwYbm`x> zRplm*v#14GpVG`N>xII~K^kzghkx$+O9w}xFCQ;H)H`bMa@DHA7EP-E`#)Q*JU^yR z%mVPnHef>0s)AEaS9Unu~xmcmbUes!(hf#X+@*QHSVK~DYqjQ zcjDZpuOsE(rS{Y)yTwh@Dz%y8Y>nEcs^?0f;XY#Gp`4r~s_by*(w#x3AXv}YGW?8i&(-HLi-S=w8kdgRD_^D* zvyu5x_DV-WPjYlFDZY}jhxnS>BJjM;_UkB=qf&B7)crB9o6aIXmiDV0V;CfXD6(!c zWar{5Um1!>Plp6R`Lq0Z`^P0LR{Ta@b}F-JI27k_$wL)>N#I$D>1KNuN!qv_lT4C1 z%R^zP+FC6Tsgsnd1s}R+Tww_K@Jq*;?m_gjzXJn{euL|S-+TKsxa-)1;5rr5+F|`)Y3O^sfG%wI>(#|=>KG? z{q+(Px(JQkOQM;`>vj!utJ^UjvnGxXa|fGC%f3IbmV8E~Mm;Fd962s1JN$K3Eu6Zs zhR$+3tec%A$8v@=5rq-xef0@omskH|s#we!nvW|Te;;#qSD>8*2=eO@l;(jt;W3ls@`=l)s%H6Ynbr&EkI0$Orz!|nv)s4`RX zY+clhr&{8;+SO6GghE_z?SHa79Ctyr&RPazHNPM<{J+Ry;{0N-+1+!?emAVFKFz;Y z){lqU&RwQ8Xa?rz9tMJ%%QI_X@A7eVG#V+(XI;t5?KFblNc31Kgo`S}-3hl4n!#{! zykDBNJ8x5oVG$cvVz>-0!ybg00000 literal 0 HcmV?d00001 diff --git a/lang/en.js b/lang/en.js index b83f417..ab18fc6 100644 --- a/lang/en.js +++ b/lang/en.js @@ -1,7 +1,16 @@ { "container.drawer.help": "Help", + "component.benefitsFeature.globalCaching.title" :"Global Caching", + "component.benefitsFeature.globalCaching.description" :"Shorten your visitor's load times with content caching in our 110+ global locations.", + "component.benefitsFeature.optimization.title" :"Website Optimization", + "component.benefitsFeature.optimization.description" :"Deliver content to users faster by enabling Cloudflare's content optimizations.", + "component.benefitsFeature.security.title" :"Security", + "component.benefitsFeature.security.description" :"Cloudflare offers protections against vulnerabilities including DDoS protection.", + "component.benefitsFeature.insights.title" :"Insights", + "component.benefitsFeature.insights.description" :"Monitor bandwidth saved, threats blocked, and more with built-in analytics.", "component.clientLogin.form.email": "Email", - "component.clientLogin.form.apiKeyHelp": "Already have an account? Get your API Key from", + "component.clientLogin.form.alreadyHaveAccount": "Already have an account?", + "component.clientLogin.form.getApiKey": "Get your API Key from", "component.clientLogin.form.apiKey": "API Key", "component.clientLogin.form.button": "Save API Credentials", "component.clientLogin.form.signUp": "Sign up", @@ -234,6 +243,10 @@ "container.sslCard.select.flexible": "Flexible", "container.sslCard.select.full": "Full", "container.sslCard.select.full_strict": "Full Strict", + "container.splashPage.heading.speedUp": "Speed up and Optimize your WordPress Site with Cloudflare", + "container.splashPage.help.alreadyHaveAccount": "Have an account already? Sign in", + "container.splashPage.help.here": "here", + "container.splashPage.button.createFreeAccount": "Create Your Free Account", "container.underAttackButton.description": "Is your website currently being attacked?", "container.underAttackButton.turnOff": "Enable \"I'm Under Attack\" Mode", "container.underAttackButton.turnOn": "Disable \"I'm Under Attack\" Mode", diff --git a/src/components/BenefitsFeature/BenefitsFeature.js b/src/components/BenefitsFeature/BenefitsFeature.js new file mode 100644 index 0000000..3f35590 --- /dev/null +++ b/src/components/BenefitsFeature/BenefitsFeature.js @@ -0,0 +1,52 @@ +import React, { Component } from 'react'; +import PropTypes from 'prop-types'; + +export default class BenefitsFeature extends Component { + render() { + /* + * These styles are stolen from the marketing site and aren't in our CSS + */ + let divStyles = { + padding: '30px 15px 30px 15px' + }; + let iconStyles = { + display: 'block', + width: '75px', + height: 'auto', + maxWidth: '100px', + margin: '0 auto' + }; + let largeLinkStyles = { + padding: '20px 0 0 0', + textAlign: 'center', + fontSize: '16px', + color: '#333333', + width: '100%', + display: 'block' + }; + let columnPStyles = { + padding: '10px 0 0 0', + fontSize: '12px', + textAlign: 'center', + color: '#9A9D9E' + }; + + return ( +
+ + + {this.props.title} + +

+ {this.props.description} +

+
+ ); + } +} + +BenefitsFeature.propTypes = { + imgSrc: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + description: PropTypes.string.isRequired +}; diff --git a/src/components/GradientBanner/GradientBanner.js b/src/components/GradientBanner/GradientBanner.js new file mode 100644 index 0000000..aec8e6f --- /dev/null +++ b/src/components/GradientBanner/GradientBanner.js @@ -0,0 +1,19 @@ +import React from 'react'; +import { createComponent } from 'cf-style-container'; + +const gradientStyles = () => ({ + width: '100%', + height: '150px', + display: 'flex', + justifyContent: 'center', + background: 'linear-gradient(left, #8176B5, #76C4E2)', + backgroundRepeat: 'no-repeat', + backgroundSize: '100% 250px', + backgroundColor: '#e6e6e6' +}); + +const GradientBanner = ({ className, children }) => { + return React.createElement('div', { className }, children); +}; + +export default createComponent(gradientStyles, GradientBanner); diff --git a/src/containers/App/App.js b/src/containers/App/App.js index a9d2754..0730c28 100644 --- a/src/containers/App/App.js +++ b/src/containers/App/App.js @@ -11,6 +11,9 @@ import { asyncConfigInit } from '../../actions/config'; import GlobalNotifications from '../../containers/GlobalNotifications/GlobalNotifications'; import Header from '../../containers/Header/Header'; +import GradientBanner from '../../components/GradientBanner/GradientBanner'; + +import { StyleProvider } from 'cf-style-provider'; //Safari Intl Polyfill if (!global.Intl) { @@ -19,41 +22,55 @@ if (!global.Intl) { class AppContainer extends Component { render() { return ( -
- - -
- - - {isLoggedIn() - ? - - - : null} + +
+ + +
+ {isLoggedIn() ? null : } + +
+ {isLoggedIn() + ? + + + : null} - {isLoggedIn() - ? -   - - {this.props.children} + {isLoggedIn() + ? +   + + {this.props.children} + +   + + : {this.props.children}} + + +

+ +

-  
- : {this.props.children}} - - -

- -

-
-
- - - -
+
+ + + +
+ ); } } diff --git a/src/containers/BenefitsCollection/BenefitsCollection.js b/src/containers/BenefitsCollection/BenefitsCollection.js new file mode 100644 index 0000000..a9f9178 --- /dev/null +++ b/src/containers/BenefitsCollection/BenefitsCollection.js @@ -0,0 +1,75 @@ +import React, { Component } from 'react'; +import { connect } from 'react-redux'; + +import { LayoutRow, LayoutColumn } from 'cf-component-layout'; +import { Flex } from 'cf-component-flex'; +import { injectIntl } from 'react-intl'; + +import BenefitsFeature from '../../components/BenefitsFeature/BenefitsFeature'; +import { getAbsoluteUrl } from '../../selectors/config'; + +class BenefitsCollection extends Component { + render() { + const { config } = this.props; + let { formatMessage } = this.props.intl; + + return ( + + +   + + + + + + + + + + + + +   + + + ); + } +} + +function mapStateToProps(state) { + return { config: state.config }; +} + +export default injectIntl(connect(mapStateToProps)(BenefitsCollection)); diff --git a/src/containers/Header/Header.js b/src/containers/Header/Header.js index 390974b..8136bed 100644 --- a/src/containers/Header/Header.js +++ b/src/containers/Header/Header.js @@ -15,8 +15,8 @@ class Header extends Component { let { config, activeZone, zoneSettings } = this.props; var logoStyle = { - width: '170px', - height: '30px', + width: '140px', + height: '40px', position: 'relative', top: '30px', // Hard code .header-main height/2 transform: 'translateY(-50%)' diff --git a/src/containers/LoginPage/LoginPage.js b/src/containers/LoginPage/LoginPage.js index dc532be..6117a9e 100644 --- a/src/containers/LoginPage/LoginPage.js +++ b/src/containers/LoginPage/LoginPage.js @@ -3,12 +3,11 @@ import { connect } from 'react-redux'; import { FormattedMessage, injectIntl } from 'react-intl'; import { Button } from 'cf-component-button'; +import { Box } from 'cf-component-box'; import { Form, FormHeader, FormFieldset, FormLabel } from 'cf-component-form'; import Input from 'cf-component-input'; import { LayoutContainer, LayoutRow, LayoutColumn } from 'cf-component-layout'; -import MarketingFeatureCollection - from '../../containers/MarketingFeatureCollection/MarketingFeatureCollection'; import { asyncAPILogin, asyncLogin } from '../../actions/user'; import { CLOUDFLARE_SIGNUP_PAGE, @@ -152,13 +151,15 @@ class LoginPage extends Component {
- + + +
@@ -199,20 +200,21 @@ class LoginPage extends Component { > cloudflare.com - . -

-

- - {' '} - - here - - . + .{' '} + + + + {' '} + + here + + . +

} @@ -221,7 +223,6 @@ class LoginPage extends Component { - ); } diff --git a/src/containers/SplashPage/SplashPage.js b/src/containers/SplashPage/SplashPage.js new file mode 100644 index 0000000..dfe856a --- /dev/null +++ b/src/containers/SplashPage/SplashPage.js @@ -0,0 +1,135 @@ +import React, { Component } from 'react'; +import { connect } from 'react-redux'; + +import { FormattedMessage, injectIntl } from 'react-intl'; +import { Box } from 'cf-component-box'; +import { Button } from 'cf-component-button'; +import { Heading } from 'cf-component-heading'; + +import { Card, CardSection } from 'cf-component-card'; + +import { LayoutContainer, LayoutRow, LayoutColumn } from 'cf-component-layout'; + +import BenefitsCollection + from '../../containers/BenefitsCollection/BenefitsCollection'; + +import { + CLOUDFLARE_SIGNUP_PAGE, + LOGIN_PAGE, + HOME_PAGE +} from '../../constants/UrlPaths.js'; +import { isLoggedIn } from '../../utils/Auth/Auth'; +import { Link } from 'react-router'; +import { push } from 'react-router-redux'; + +import { openWindow720x720 } from '../../utils/utils.js'; +import { getConfigValue } from '../../selectors/config'; +import { generateUTMLink } from '../../selectors/generateUTMLink.js'; +import { generateChannelLink } from '../../selectors/generateChannelLink.js'; + +const SIGNUP_SPLASH_UTM_CONTENT_IDENTIFIER = 'signup_splash_page'; + +const cardBoxStyles = { + margin: '2em auto', + maxWidth: '1024px', + textAlign: 'center' +}; + +const linkStyles = { + textDecoration: 'none', + color: '#1592E6' +}; + +const textStyles = { + color: '#9A9D9E' +}; + +const cardPaddingStyles = { + padding: '65px 0' +}; + +class SplashPage extends Component { + componentWillMount() { + let { dispatch } = this.props; + if (isLoggedIn()) { + dispatch(push(HOME_PAGE)); + } + } + + render() { + const { config } = this.props; + + let signupLinkWithUTM = generateUTMLink( + CLOUDFLARE_SIGNUP_PAGE, + getConfigValue(config, 'integrationName'), + getConfigValue(config, 'integrationName'), + SIGNUP_SPLASH_UTM_CONTENT_IDENTIFIER + ); + + let signupLinkWithUTMAndChannel = generateChannelLink( + signupLinkWithUTM, + getConfigValue(config, 'integrationName') + ); + + return ( + + + + + + + + + + + + + + + + + + + + + +

+ + {' '} + + + + . +

+
+
+ + + + + +
+ +
+
+
+
+ ); + } +} + +function mapStateToProps(state) { + return { + config: state.config + }; +} + +export default injectIntl(connect(mapStateToProps)(SplashPage)); diff --git a/src/routes.js b/src/routes.js index 4e81a3a..c642c6b 100644 --- a/src/routes.js +++ b/src/routes.js @@ -9,6 +9,7 @@ import App from './containers/App/App'; import DNSManagementPage from './containers/DNSManagementPage/DNSManagementPage'; import Login from './containers/LoginPage/LoginPage'; +import Splash from './containers/SplashPage/SplashPage'; import SignUpPage from './containers/SignUpPage/SignUpPage'; import HomePage from './containers/HomePage/HomePage'; import MoreSettingsPage from './containers/MoreSettingsPage/MoreSettingsPage'; @@ -24,7 +25,7 @@ function requireAuth(nextState, replaceState) { export default ( - + -1) { + return encodeURI(`${pageURL}&channel=${channelName}`); + } + return encodeURI(`${pageURL}?channel=${channelName}`); +} diff --git a/src/test/_helpers/createMockStore.js b/src/test/_helpers/createMockStore.js new file mode 100644 index 0000000..6875cf3 --- /dev/null +++ b/src/test/_helpers/createMockStore.js @@ -0,0 +1,5 @@ +import configureStore from 'redux-mock-store'; +import thunk from 'redux-thunk'; +const middlewares = [thunk]; + +export default state => configureStore(middlewares)(state); diff --git a/src/test/components/BenefitsFeatureTest.js b/src/test/components/BenefitsFeatureTest.js new file mode 100644 index 0000000..054db8b --- /dev/null +++ b/src/test/components/BenefitsFeatureTest.js @@ -0,0 +1,16 @@ +import React from 'react'; +import BenefitsFeature from '../../components/BenefitsFeature/BenefitsFeature'; +import renderer from 'react-test-renderer'; + +it('renders enabled correctly', () => { + const component = renderer + .create( + + ) + .toJSON(); + expect(component).toMatchSnapshot(); +}); diff --git a/src/test/components/GradientBannerTest.js b/src/test/components/GradientBannerTest.js new file mode 100644 index 0000000..7989fd2 --- /dev/null +++ b/src/test/components/GradientBannerTest.js @@ -0,0 +1,24 @@ +import React from 'react'; +import GradientBanner from '../../components/GradientBanner/GradientBanner'; +import renderer from 'react-test-renderer'; +import { StyleProvider } from 'cf-style-provider'; + +it('renders enabled correctly', () => { + const component = renderer + .create( + + + + ) + .toJSON(); + expect(component).toMatchSnapshot(); +}); diff --git a/src/test/components/__snapshots__/BenefitsFeatureTest.js.snap b/src/test/components/__snapshots__/BenefitsFeatureTest.js.snap new file mode 100644 index 0000000..699b2f6 --- /dev/null +++ b/src/test/components/__snapshots__/BenefitsFeatureTest.js.snap @@ -0,0 +1,51 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders enabled correctly 1`] = ` +
+ + + title + +

+ description +

+
+`; diff --git a/src/test/components/__snapshots__/GradientBannerTest.js.snap b/src/test/components/__snapshots__/GradientBannerTest.js.snap new file mode 100644 index 0000000..f27d4c9 --- /dev/null +++ b/src/test/components/__snapshots__/GradientBannerTest.js.snap @@ -0,0 +1,7 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders enabled correctly 1`] = ` +
+`; diff --git a/src/test/containers/SplashPageTest.js b/src/test/containers/SplashPageTest.js new file mode 100644 index 0000000..2b58a54 --- /dev/null +++ b/src/test/containers/SplashPageTest.js @@ -0,0 +1,50 @@ +import React from 'react'; +import SplashPage from '../../containers/SplashPage/SplashPage'; + +import renderer from 'react-test-renderer'; +import createMockStore from '../_helpers/createMockStore'; + +import { Provider } from 'react-redux'; +import { StyleProvider } from 'cf-style-provider'; +import { IntlProvider } from 'react-intl'; + +const messages = { + 'container.splashPage.heading.speedUp': 'Speed up and Optimize your WordPress Site with Cloudflare', + 'container.splashPage.help.alreadyHaveAccount': 'Have an account already? Sign in', + 'container.splashPage.help.here': 'here', + 'container.splashPage.button.createFreeAccount': 'Create Your Free Account', + 'component.benefitsFeature.globalCaching.title': 'Global Caching', + 'component.benefitsFeature.globalCaching.description': "Shorten your visitor's load times with content caching in our 110+ global locations.", + 'component.benefitsFeature.optimization.title': 'Website Optimization', + 'component.benefitsFeature.optimization.description': "Deliver content to users faster by enabling Cloudflare's content optimizations.", + 'component.benefitsFeature.security.title': 'Security', + 'component.benefitsFeature.security.description': 'Cloudflare offers protections against vulnerabilities including DDoS protection.', + 'component.benefitsFeature.insights.title': 'Insights', + 'component.benefitsFeature.insights.description': 'Monitor bandwidth saved, threats blocked, and more with built-in analytics.' +}; + +it('renders enabled correctly', () => { + window.localStorage = {}; + const component = renderer + .create( + + + + + + + + + ) + .toJSON(); + expect(component).toMatchSnapshot(); +}); diff --git a/src/test/containers/__snapshots__/SplashPageTest.js.snap b/src/test/containers/__snapshots__/SplashPageTest.js.snap new file mode 100644 index 0000000..d55e032 --- /dev/null +++ b/src/test/containers/__snapshots__/SplashPageTest.js.snap @@ -0,0 +1,371 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`renders enabled correctly 1`] = ` +
+
+
+
+
+
+
+

+ + Speed up and Optimize your WordPress Site with Cloudflare + +

+
+
+
+
+ +
+
+
+
+

+ + Have an account already? Sign in + + + + + here + + + . +

+
+
+
+
+
+
+
+   +
+
+
+ + + Global Caching + +

+ Shorten your visitor's load times with content caching in our 110+ global locations. +

+
+
+
+
+ + + Website Optimization + +

+ Deliver content to users faster by enabling Cloudflare's content optimizations. +

+
+
+
+
+ + + Security + +

+ Cloudflare offers protections against vulnerabilities including DDoS protection. +

+
+
+
+
+ + + Insights + +

+ Monitor bandwidth saved, threats blocked, and more with built-in analytics. +

+
+
+
+   +
+
+
+
+
+
+
+
+
+
+`; diff --git a/src/test/selectors/generateChannelLinkTest.js b/src/test/selectors/generateChannelLinkTest.js new file mode 100644 index 0000000..1d87e3e --- /dev/null +++ b/src/test/selectors/generateChannelLinkTest.js @@ -0,0 +1,16 @@ +import { generateChannelLink } from '../../selectors/generateChannelLink.js'; + +describe('generateChannelLink', function() { + it('should return appended wordpress uri', function() { + expect( + generateChannelLink('htttp://www.example.com?Param1=param', 'wordpress') + ).toBe( + 'htttp://www.example.com?Param1=param&channel=Integration:%20WordPress' + ); + }); + it('should return new cpanel uri', function() { + expect(generateChannelLink('htttp://www.example.com', 'cpanel')).toBe( + 'htttp://www.example.com?channel=Integration:%20CPanel' + ); + }); +}); diff --git a/stylesheets/components.css b/stylesheets/components.css index 9facab2..095b702 100644 --- a/stylesheets/components.css +++ b/stylesheets/components.css @@ -1,2 +1,2 @@ -@font-face{font-family:cloudflare-font;src:url(../fonts/cloudflare-font.eot);src:url(../fonts/cloudflare-font.eot?#iefix) format("embedded-opentype"),url(../fonts/cloudflare-font.woff) format("woff"),url(../fonts/cloudflare-font.ttf) format("truetype"),url(../fonts/cloudflare-font.svg#cloudflare-font) format("svg");font-weight:400;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-300.eot);src:url(../fonts/opensans-300.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-300.woff2) format("woff2"),url(../fonts/opensans-300.woff) format("woff"),url(../fonts/opensans-300.ttf) format("truetype");font-weight:300;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-300i.eot);src:url(../fonts/opensans-300i.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-300i.woff2) format("woff2"),url(../fonts/opensans-300i.woff) format("woff"),url(../fonts/opensans-300i.ttf) format("truetype");font-weight:300;font-style:italic}@font-face{font-family:Open Sans;src:url(../fonts/opensans-400.eot);src:url(../fonts/opensans-400.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-400.woff2) format("woff2"),url(../fonts/opensans-400.woff) format("woff"),url(../fonts/opensans-400.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-400i.eot);src:url(../fonts/opensans-400i.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-400i.woff2) format("woff2"),url(../fonts/opensans-400i.woff) format("woff"),url(../fonts/opensans-400i.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:Open Sans;src:url(../fonts/opensans-600.eot);src:url(../fonts/opensans-600.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-600.woff2) format("woff2"),url(../fonts/opensans-600.woff) format("woff"),url(../fonts/opensans-600.ttf) format("truetype");font-weight:600;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-700.eot);src:url(../fonts/opensans-700.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-700.woff2) format("woff2"),url(../fonts/opensans-700.woff) format("woff"),url(../fonts/opensans-700.ttf) format("truetype");font-weight:700;font-style:normal}.cf-btn:focus,.cf-checkbox__input:focus,.cf-dropdown__link a:focus,.cf-input:focus,.cf-link:focus,.cf-radio__input:focus,.cf-tabs__item:focus:after,.cf-textarea:focus,.cf-toggle__checkbox:focus~.cf-toggle__handle{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-1px}.cf-toggle__checkbox,.cf-toggle__label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.cf-checkbox__input,.cf-input,.cf-radio__input,.cf-textarea{z-index:0;width:100%;margin:0 0 .75rem;padding:.45em .75em;border:1px solid #bdbdbd;vertical-align:middle;font-family:Open Sans,Helvetica,Arial,sans-serif;font-size:.86667em;background:#fff;color:#333;outline:none;-webkit-transition:border-color .2s ease;transition:border-color .2s ease}.cf-checkbox__input:hover,.cf-input:hover,.cf-radio__input:hover,.cf-textarea:hover{border-color:#256298}.cf-checkbox__input:focus,.cf-input:focus,.cf-radio__input:focus,.cf-textarea:focus{border-color:#2f7bbf}.cf-input,.cf-textarea{border-radius:2px}.cf-checkbox__group,.cf-radio__group{text-align:left;display:inline-block;vertical-align:middle}.cf-checkbox,.cf-radio{cursor:pointer;display:block;min-height:1em;padding-left:2em}.cf-checkbox:hover input,.cf-radio:hover input{border-color:#256298}.cf-checkbox__input,.cf-radio__input{position:relative;height:15px;width:15px;margin:1px 0 0;padding:0;line-height:normal;-webkit-appearance:none;-moz-appearance:none;appearance:none;top:-1px}.cf-checkbox__input:before,.cf-radio__input:before{content:'';position:absolute;background-color:transparent;color:transparent;-webkit-text-stroke:0;-webkit-transition:all .15s ease-out;transition:all .15s ease-out}.cf-checkbox__input{border-radius:2px}.cf-checkbox__input:before{content:'\f009';font-family:cloudflare-font;font-size:15px;left:-1px;top:-1px}.cf-checkbox--checked .cf-checkbox__input:before{color:#333}.cf-radio__input,.cf-radio__input:before{border-radius:50%}.cf-radio__input:before{height:3px;width:3px;top:5px;left:5px}.cf-radio--checked .cf-radio__input:before{background-color:#333;height:7px;width:7px;top:3px;left:3px}.cf-checkbox__label,.cf-radio__label{display:inline;font-size:.86667em;margin-bottom:.38333em;margin-left:1em;min-height:1.22em}.cf-card__toolbar:after,.cf-form__fieldset:after,.cf-modal__footer:after,.cf-progress__items:after{content:"";display:table;clear:both}.cf-btn__group{position:relative;display:inline-block;font-size:0;vertical-align:middle;white-space:nowrap}.cf-btn__group>*{font-size:1rem}.cf-btn__group+.cf-btn__group{margin-left:.4rem}.cf-btn__group .cf-btn{border-radius:0}.cf-btn__group .cf-btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.cf-btn__group .cf-btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.cf-btn__group .cf-btn~.cf-btn{margin-left:-1px}.cf-btn{display:inline-block;position:relative;margin:0;padding:.6em 1em .53333em;border:none;border-bottom:1px solid;background:transparent;border-radius:2px;font-size:.93333rem;font-weight:400;font-family:inherit;line-height:1.2;text-align:center;-webkit-text-stroke:0;-webkit-font-smoothing:subpixel-antialiased;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;-webkit-transition:all .2s ease;transition:all .2s ease}.cf-btn::-moz-focus-inner{padding:0;border:0}.cf-btn+.cf-btn{margin-left:.4rem}.cf-btn--default,.cf-btn--delete,.cf-btn--edit,.cf-btn--note{background-color:#dedede;border-color:#ccc;color:#333}.cf-btn--default:hover,.cf-btn--delete:hover,.cf-btn--edit:hover,.cf-btn--note:hover{background-color:#ccc;border-color:#bababa;color:#333}.cf-btn--default.cf-btn--active,.cf-btn--default:active,.cf-btn--delete.cf-btn--active,.cf-btn--delete:active,.cf-btn--edit.cf-btn--active,.cf-btn--edit:active,.cf-btn--note.cf-btn--active,.cf-btn--note:active{background-color:#bababa;border-color:#a8a8a8;color:#333}.cf-btn--default:focus,.cf-btn--delete:focus,.cf-btn--edit:focus,.cf-btn--note:focus{box-shadow:inset 0 0 0 1px #a8a8a8;color:#333}.cf-btn--primary{background-color:#2f7bbf;border-color:#286aa4;color:#fff}.cf-btn--primary:hover{background-color:#286aa4;border-color:#215887;color:#fff}.cf-btn--primary.cf-btn--active,.cf-btn--primary:active{background-color:#215887;border-color:#1a456b;color:#fff}.cf-btn--primary:focus{box-shadow:inset 0 0 0 1px #1a456b;color:#fff}.cf-btn--accept,.cf-btn--success{background-color:#9bca3e;border-color:#89b431;color:#fff}.cf-btn--accept:hover,.cf-btn--success:hover{background-color:#89b431;border-color:#73982a;color:#fff}.cf-btn--accept.cf-btn--active,.cf-btn--accept:active,.cf-btn--success.cf-btn--active,.cf-btn--success:active{background-color:#73982a;border-color:#5e7c22;color:#fff}.cf-btn--accept:focus,.cf-btn--success:focus{box-shadow:inset 0 0 0 1px #5e7c22;color:#fff}.cf-btn--warning{background-color:#ff7900;border-color:#db6600;color:#fff}.cf-btn--warning:hover{background-color:#db6600;border-color:#b85600;color:#fff}.cf-btn--warning.cf-btn--active,.cf-btn--warning:active{background-color:#b85600;border-color:#944500;color:#fff}.cf-btn--warning:focus{box-shadow:inset 0 0 0 1px #944500;color:#fff}.cf-btn--cancel,.cf-btn--danger{background-color:#bd2527;border-color:#9e1f21;color:#fff}.cf-btn--cancel:hover,.cf-btn--danger:hover{background-color:#9e1f21;border-color:#80191b;color:#fff}.cf-btn--cancel.cf-btn--active,.cf-btn--cancel:active,.cf-btn--danger.cf-btn--active,.cf-btn--danger:active{background-color:#80191b;border-color:#621315;color:#fff}.cf-btn--cancel:focus,.cf-btn--danger:focus{box-shadow:inset 0 0 0 1px #621315;color:#fff}.cf-btn--disabled{cursor:default;pointer-events:none;opacity:.5}.cf-btn--disabled[title]{pointer-events:auto}.cf-btn--link{background-color:transparent;border-color:transparent;color:#2f7bbf}.cf-btn--link:hover{color:#ff7900}.cf-btn--link.cf-btn--active,.cf-btn--link:active,.cf-btn--link:focus{color:#2f7bbf}.cf-btn--facebook i,.cf-btn--twitter i{vertical-align:baseline;font-size:1.33em}.cf-btn--twitter{background-color:#00aced;border-color:#00aced;color:#fff}.cf-btn--twitter:hover{background-color:#1fc3ff;border-color:#05bcff;color:#333}.cf-btn--facebook{background-color:#3b5998;border-color:#3b5998;color:#fff}.cf-btn--facebook:hover{background-color:#4b6eb9;border-color:#4262a9;color:#fff}.cf-btn--accept,.cf-btn--cancel,.cf-btn--delete,.cf-btn--edit,.cf-btn--note{min-height:2.425rem;width:0;overflow:hidden;padding:1.13333em;text-align:left;text-indent:-9999px;white-space:nowrap;font-family:cloudflare-font;font-weight:400;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:subpixel-antialiased}.cf-btn--accept:after,.cf-btn--cancel:after,.cf-btn--delete:after,.cf-btn--edit:after,.cf-btn--note:after{content:"\f009";display:block;position:absolute;height:100%;width:100%;top:53%;left:0;text-align:center;text-indent:0;font-size:225em;line-height:0;speak:none;-webkit-transition-delay:.2s;transition-delay:.2s}.cf-btn--accept:after,.cf-btn--accept:before,.cf-btn--cancel:after,.cf-btn--cancel:before,.cf-btn--delete:after,.cf-btn--delete:before,.cf-btn--edit:after,.cf-btn--edit:before,.cf-btn--note:after,.cf-btn--note:before{-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.cf-btn--accept:after{content:"\f009"}.cf-btn--cancel:after{content:"\f01a"}.cf-btn--delete:after{content:"\f01a"}.cf-btn--edit:after{content:"\f019"}.cf-btn--note:after{content:"\f013"}.cf-btn--block{display:block;margin-bottom:.4rem}.cf-btn--block+.cf-btn--block{margin-left:auto}.cf-btn--loading{color:#ededed;background-color:#ededed;opacity:.8;cursor:default}.cf-btn--loading:before{content:"";display:block;position:absolute;top:0;left:0;height:100%;width:100%;opacity:1;background:transparent url(../assets/spinner.gif) no-repeat 50%;-webkit-transform:scale(1);transform:scale(1);-webkit-animation:a .2s ease-in-out;animation:a .2s ease-in-out}.cf-btn--loading:focus{outline:none}.cf-btn--loading:focus,.cf-btn--loading:hover{background-color:#ededed;color:#ededed}@-webkit-keyframes a{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes a{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.cf-callout{margin:1rem;padding:1rem;border:1px solid transparent;border-radius:2px}.cf-callout--default{background-color:#333;border-color:#333;color:#fff}.cf-callout--info{background-color:#2f7bbf;border-color:#286aa4;color:#fff}.cf-callout__content{margin-top:0}.cf-card{margin-top:1rem;margin-bottom:1rem;padding:0;border:1px solid #dedede;background-color:#fff;border-radius:2px;-webkit-transition:all .35s ease;transition:all .35s ease}.cf-card__section{display:table;table-layout:fixed;width:100%}.cf-card__section+.cf-card__section{border-top:1px solid #dedede}.cf-card__section--error{border-left:3px solid #bd2527}.cf-card__title{font-weight:400;margin-bottom:1rem}.cf-card__footer_message{font-size:.8rem;color:#7d7d7d;line-height:1.3;margin-top:1.5em}.cf-card__messages{padding-top:.5rem}.cf-card__messages .card__messages+p{margin-top:1em}.cf-card__content{padding:1.5rem}.cf-card__control{position:relative;padding:2rem;border:0 solid #dedede;border-top-width:1px;background-color:#000;background-color:rgba(0,0,0,.06);text-align:center}@media (min-width:49.2em){.cf-card__content,.cf-card__control{display:table-cell}.cf-card__control{width:40%;border-left-width:1px;border-top-width:0;vertical-align:middle}}@media (min-width:66em){.cf-card__control{width:30%}}.cf-card__toolbar{min-height:2.96666rem}.cf-card__toolbar_links{float:right}.cf-card__toolbar_link{position:relative;display:inline-block;padding:.73333rem 2em .73333rem .5rem}.cf-card__toolbar_link:after{content:"\f003";font-family:cloudflare-font;font-style:normal;font-weight:400;margin-top:-.6em;position:absolute;top:50%;right:1rem;-webkit-transition:-webkit-transform .2s ease;transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease}.cf-card__toolbar_link--open:after{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.cf-card__drawers_container{display:none}.cf-card__drawers_container--open{display:block}.cf-card__drawer--active{border-top:1px solid #dedede;padding:1.5rem}.cf-card .cf-table{margin-top:0;margin-bottom:0;border-width:0}.cf-card .cf-form{border-left-width:0;border-right-width:0}.cf-checkbox__group .cf-checkbox:first-child{margin-top:0}.cf-checkbox__group .cf-checkbox{margin-top:1em}.cf-code,.cf-code__block{background-color:#dedede;border:1px solid #d1d1d1;font-family:monaco,courier,monospace;border-radius:2px}.cf-code{display:inline-block;margin-left:.13333em;margin-right:.13333em;padding:0 .4em;vertical-align:baseline;color:#bd2527}.cf-code__block{display:block;width:100%;margin:2rem 0;padding:.5rem;font-size:.86667rem;color:#4d4d4d}.cf-code__block .cf-code{display:inherit;margin:auto;padding:auto;background:none;border:none;color:inherit}.cf-copyable-textarea{margin-top:1rem;cursor:pointer}.cf-copyable-textarea .cf-textarea{height:7rem;word-break:break-all;cursor:text;resize:none;color:#333;font-family:monaco,courier,monospace}.cf-copyable-textarea__help-text{font-size:.8em;color:#7d7d7d;margin-top:-.5em;margin-bottom:1em}.cf-dropdown{position:absolute;z-index:1;min-width:10.66667rem;margin:.5em 0 0;padding:.33333rem 0;list-style:none;background:#fff;border:1px solid #dedede;border-radius:2px;box-shadow:0 3px 10px rgba(0,0,0,.2);-webkit-animation:b .15s ease-out;animation:b .15s ease-out}.cf-dropdown:before{content:"";display:block;position:absolute;bottom:100%;border:solid transparent;border-width:10px;border-top-width:0;border-bottom-color:#fff}@-webkit-keyframes b{0%{display:none;opacity:0}1%{display:block;opacity:0;top:80%}to{display:none;opacity:1;top:102%}}@keyframes b{0%{display:none;opacity:0}1%{display:block;opacity:0;top:80%}to{display:none;opacity:1;top:102%}}.cf-dropdown--left{left:0}.cf-dropdown--left:before{left:10px}.cf-dropdown--right{right:0}.cf-dropdown--right:before{right:10px}.cf-dropdown__link{position:relative;z-index:1}.cf-dropdown__link a{display:block;padding:.2rem 1.06667rem;cursor:pointer;white-space:nowrap}.cf-dropdown__link a:hover{color:#fff;background:#2f7bbf}.cf-dropdown__link a:focus{color:#fff;background:#63a2d9}.cf-dropdown__link a:active{color:#fff;background:#112d46}.cf-dropdown__link:first-child{border-top-width:0}.cf-dropdown__separator{margin:.53333rem 0;border-top:1px solid #dedede}.cf-flex--thin .cf-flex__item+.cf-flex__item{margin-top:.4rem}.cf-flex--wide .cf-flex__item+.cf-flex__item{margin-top:1.33333rem}@media (min-width:49.2em){.cf-flex{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.cf-flex__item{-webkit-box-flex:1;-webkit-flex:1 0;-ms-flex:1 0;flex:1 0}.cf-flex__item--collapse{-webkit-box-flex:0;-webkit-flex:0 auto;-ms-flex:0 auto;flex:0 auto}.cf-flex--thin .cf-flex__item+.cf-flex__item{margin-top:0;margin-left:.4rem}.cf-flex--wide .cf-flex__item+.cf-flex__item{margin-top:0;margin-left:1.33333rem}}.cf-form{background:#fff;border:1px solid #dedede;box-shadow:0 1px 1px rgba(0,0,0,.05)}.cf-form__header{padding:1em;border-bottom:1px solid #dedede}.cf-form__footer{padding:1em;border-top:1px solid #dedede;text-align:right}.cf-form__title{margin:0}.cf-form__fieldset{margin:0;padding:0;border:none;border-bottom:1px solid #dedede}.cf-form__fieldset:last-child{border-bottom:none}.cf-form__fieldset_legend{padding:1em;margin-bottom:0;border-bottom:none}.cf-form__fieldset_content{padding:1em;border:0 solid #dedede;border-top-width:1px;background:#eee}.cf-form__label{display:block;margin-bottom:.2em;color:#333}.cf-form .cf-checkbox,.cf-form .cf-input,.cf-form .cf-radio,.cf-form .cf-textarea{margin-bottom:0}.cf-form__label{font-size:.86667em}.cf-form__label--hidden{display:none}.cf-form__field-error{position:relative;margin-top:.2em;padding:.5em 1em;border:1px solid #9e1f21;font-size:.8em;font-weight:600;background:#bd2527;color:#fff;-webkit-font-smoothing:antialiased;border-radius:2px;box-shadow:0 1px 1px rgba(0,0,0,.1)}.cf-form__field-error:after,.cf-form__field-error:before{content:"";display:block;position:absolute;bottom:100%;border-style:solid;border-color:transparent}.cf-form__field-error:before{left:4px;border-width:6px;border-bottom-color:#9e1f21}.cf-form__field-error:after{left:5px;border-width:5px;border-bottom-color:#bd2527}.cf-form__field-error p{margin-top:0;margin-bottom:0}.cf-form__field-error p+p{margin-top:.5em}@media (min-width:720px){.cf-form--horizontal .cf-form__fieldset_legend{width:30%;float:left;padding:1.7em 1rem;color:#333;text-align:right}.cf-form--horizontal .cf-form__fieldset_content{width:70%;float:left;border-top-width:0;border-left-width:1px}}.cf-heading{font-weight:700}.cf-heading__caption{color:#7d7d7d;font-size:80%;margin-left:.5em}.cf-heading--1{font-size:2rem;line-height:1.2;font-weight:400}.cf-heading--2{font-size:1.6rem;line-height:1.3}.cf-heading--3{font-size:1.46667rem;line-height:1.3}.cf-heading--4{font-size:1.2rem;line-height:1.3}.cf-heading--5{font-size:1rem;line-height:1.5}.cf-heading--6{font-size:.93333rem;line-height:1.5}.cf-icon{display:inline;width:auto;height:auto;margin-top:0;line-height:normal;vertical-align:baseline;font-family:cloudflare-font;font-weight:400;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:none;background-position:0 0;background-repeat:repeat}.cf-icon:before{display:inline-block;text-decoration:inherit;speak:none}.cf-icon__label{display:inline-block;width:0;height:0;overflow:hidden}.cf-icon--border{border:1px solid #333;padding:.2em .25em .15em;border-radius:2px}.cf-icon--spin{display:inline-block;-webkit-animation:c 2s infinite linear;animation:c 2s infinite linear}@-webkit-keyframes c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.cf-icon--muted{color:#333}.cf-icon--white{color:#fff}.cf-icon--2x{font-size:2em}.cf-icon--2x.cf-icon--border{border-width:2px}.cf-icon--3x{font-size:3em}.cf-icon--3x.cf-icon--border{border-width:3px}.cf-icon--4x{font-size:4em}.cf-icon--4x.cf-icon--border{border-width:4px}.cf-icon--large{vertical-align:-10%;font-size:1.3333333333333335em}.cf-icon--xlarge{font-size:2.4em}.cf-icon--caret-up:before,.cf-icon--chevron-up:before{content:"\f000"}.cf-icon--caret-down:before,.cf-icon--chevron-down:before{content:"\f001"}.cf-icon--caret-left:before,.cf-icon--chevron-left:before{content:"\f002"}.cf-icon--caret-right:before,.cf-icon--chevron-right:before{content:"\f003"}.cf-icon--ok-sign:before{content:"\f004"}.cf-icon--exclamation-sign:before{content:"\f005"}.cf-icon--info-sign:before{content:"\f006"}.cf-icon--pause:before{content:"\f007"}.cf-icon--time:before{content:"\f008"}.cf-icon--ok:before{content:"\f009"}.cf-icon--clipboard:before{content:"\f00a"}.cf-icon--bolt:before{content:"\f00b"}.cf-icon--chart:before{content:"\f00c"}.cf-icon--drive:before{content:"\f00d"}.cf-icon--filter:before{content:"\f00e"}.cf-icon--flowchart:before{content:"\f00f"}.cf-icon--hamburger:before{content:"\f010"}.cf-icon--lock:before{content:"\f011"}.cf-icon--list:before{content:"\f012"}.cf-icon--file:before{content:"\f013"}.cf-icon--shield:before{content:"\f014"}.cf-icon--plus:before{content:"\f015"}.cf-icon--happy:before{content:"\f016"}.cf-icon--sad:before{content:"\f017"}.cf-icon--search:before{content:"\f018"}.cf-icon--wrench:before{content:"\f019"}.cf-icon--remove-sign:before,.cf-icon--remove:before{content:"\f01a"}.cf-icon--speech:before{content:"\f01b"}.cf-icon--gear:before{content:"\f01c"}.cf-icon--help:before{content:"\f01d"}.cf-icon--widen:before{content:"\f022"}.cf-icon--calendar:before{content:"\f01e"}.cf-icon--facebook:before{content:"\f01f"}.cf-icon--twitter:before{content:"\f020"}.cf-icon--googleplus:before{content:"\f021"}.cf-icon--linkedin:before{content:"\f022"}.cf-icon--resize-horizontal:before{content:"\f024"}.cf-icon--upload:before{content:"\f025"}.cf-icon--loading{background:transparent url(../assets/spinner.gif) no-repeat 50%}.cf-icon--loading:before{content:"";width:1.06733rem}.cf-icon--close:before{content:'\00D7';font-family:Open Sans,Helvetica,Arial,sans-serif}.cf-label{display:inline-block;padding:.26667em .4em;font-size:.86667rem;line-height:1rem;vertical-align:baseline;white-space:nowrap;color:#fff;font-weight:600;text-transform:uppercase;-webkit-text-stroke:0;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.cf-label--default{background:#7d7d7d}.cf-label--info{background:#2f7bbf}.cf-label--success{background:#9bca3e}.cf-label--warning{background:#ff7900}.cf-label--error{background:#bd2527}.cf-layout__container{padding:0 1.5em;max-width:90%;margin:0 auto}.cf-layout__row{clear:both}.cf-layout__column{float:left}@media (max-width:49.2em){.cf-layout__container{padding:0;max-width:none}.cf-layout__column{width:100%!important;float:none}}.cf-link{color:#2f7bbf;outline:none;text-decoration:none;-webkit-transition:all .15s ease;transition:all .15s ease;cursor:pointer}.cf-link:hover{color:#ff7900}.cf-link:focus{color:#63a2d9}.cf-link:active{color:#112d46;outline:none}.cf-list{list-style-type:disc;list-style-position:outside;margin-left:3em}.cf-list--ordered{list-style-type:decimal}.cf-list--unstyled{list-style-type:none;margin-left:0}.cf-modal__backdrop-scroller{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1050;overflow:auto;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.cf-modal__backdrop-outer{position:relative;width:100%;height:100%;display:table}.cf-modal__backdrop{display:table-cell;vertical-align:middle;padding:1.5rem;background:#000;background:rgba(0,0,0,.7);-webkit-transform-origin:center;transform-origin:center}.cf-modal{position:relative;width:100%;max-width:30rem;margin:0 auto;background:#fff;-webkit-transform-origin:center;transform-origin:center;-webkit-backface-visibility:hidden;backface-visibility:hidden;border-radius:2px;box-shadow:0 1px 15px rgba(0,0,0,.75)}.cf-modal:focus{outline:none}.cf-modal__body,.cf-modal__footer,.cf-modal__header{position:relative;padding:1.5rem}.cf-modal__header+.cf-modal__body{padding-top:0}.cf-modal__title{font-weight:400;word-break:break-all;margin-bottom:.75rem}.cf-modal__title .cf-heading{font-weight:inherit}.cf-modal__close{cursor:pointer;right:1.5rem;top:1rem;position:absolute;line-height:.6}.cf-modal__footer{background-color:#ebebeb}.cf-modal__footer--simple{background-color:transparent}.cf-modal__actions{float:right}.cf-modal--confirm .cf-modal__footer{padding-top:0}.cf-transition-modal-appear .cf-modal__backdrop,.cf-transition-modal-enter .cf-modal__backdrop,.cf-transition-modal-leave.cf-transition-modal-leave-active .cf-modal__backdrop{background:transparent}.cf-transition-modal-appear.cf-transition-modal-appear-active .cf-modal__backdrop,.cf-transition-modal-enter.cf-transition-modal-enter-active .cf-modal__backdrop,.cf-transition-modal-leave .cf-modal__backdrop{background:#000;background:rgba(0,0,0,.7)}.cf-transition-modal-appear-active .cf-modal__backdrop,.cf-transition-modal-enter-active .cf-modal__backdrop,.cf-transition-modal-leave-active .cf-modal__backdrop{-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.cf-transition-modal-appear .cf-modal,.cf-transition-modal-enter .cf-modal,.cf-transition-modal-leave.cf-transition-modal-leave-active .cf-modal{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,-.0002,0,0,1,0,0,-10,0,1.1);transform:matrix3d(1,0,0,0,0,1,0,-.0002,0,0,1,0,0,-10,0,1.1)}.cf-transition-modal-appear.cf-transition-modal-appear-active .cf-modal,.cf-transition-modal-enter.cf-transition-modal-enter-active .cf-modal,.cf-transition-modal-leave .cf-modal{opacity:1;-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}.cf-transition-modal-appear-active .cf-modal,.cf-transition-modal-enter-active .cf-modal,.cf-transition-modal-leave-active .cf-modal{-webkit-transition:opacity .2s ease,-webkit-transform .2s ease;transition:opacity .2s ease,-webkit-transform .2s ease;transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease,-webkit-transform .2s ease}.cf-modal .cf-form{border-left-width:0;border-right-width:0}.cf-modal .cf-form__fieldset_legend{font-size:.86667em}.cf-notifications{margin-top:.5em;margin-bottom:.5em}.cf-notifications__item{position:relative;padding:.5rem 2.5rem;padding-right:2.5rem;border:1px solid;vertical-align:middle;-webkit-text-stroke:0;border-radius:2px;cursor:pointer;-webkit-font-smoothing:antialiased}.cf-notifications__item:before{font-family:cloudflare-font;font-size:1.25rem;position:absolute;top:50%;left:.75rem;-webkit-transform:translateY(-50%);transform:translateY(-50%);line-height:1;vertical-align:middle}.cf-notifications__item+.cf-notifications__item{margin-top:2px}.cf-notifications__global_container{position:fixed;bottom:0;left:0;right:0;max-height:25%;overflow:auto;z-index:1100}.cf-notifications__global_container .cf-notifications{margin-top:0;margin-bottom:0}.cf-notifications__global_container .cf-notifications__item{border-radius:0;border-left-width:0;border-right-width:0;-webkit-transform-origin:bottom left;transform-origin:bottom left;-webkit-animation:d .2s ease-in-out;animation:d .2s ease-in-out}.cf-notifications__global_container .cf-notifications__item:before{-webkit-animation:e .2s ease-out;animation:e .2s ease-out}.cf-notifications__global_container .cf-notifications__item+.cf-notifications__item{margin-top:0;border-top-width:0}.cf-notifications__item_progress{position:absolute;z-index:1;top:0;bottom:0;left:0;width:100%;background:#fff;background:hsla(0,0%,100%,.1)}.cf-notifications__item_progress--active{width:0;-webkit-transition:width 0s linear;transition:width 0s linear}.cf-notifications__item_close{position:absolute;z-index:3;top:0;right:0;bottom:0;width:2.5em;cursor:pointer}.cf-notifications__item_close:hover{background:#000;background:rgba(0,0,0,.1)}.cf-notifications__item_close:before{content:'\00D7';position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:1.25rem}.cf-notifications__item_message{position:relative;z-index:2}.cf-notifications__item--success{background-color:#89b431;border-color:#89b431;color:#fff}.cf-notifications__item--success:before{content:'\f004'}.cf-notifications__item--error{background-color:#bd2527;border-color:#9e1f21;color:#fff}.cf-notifications__item--error:before{content:'\f005'}.cf-notifications__item--info{background-color:#2f7bbf;border-color:#286aa4;color:#fff}.cf-notifications__item--info:before{content:'\f006'}.cf-notifications__item--warning{background-color:#ff7900;border-color:#db6600;color:#fff}.cf-notifications__item--warning:before{content:'\f005'}@-webkit-keyframes d{0%{-webkit-transform:scaleY(0);transform:scaleY(0)}to{-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes d{0%{-webkit-transform:scaleY(0);transform:scaleY(0)}to{-webkit-transform:scaleY(1);transform:scaleY(1)}}@-webkit-keyframes e{0%{-webkit-transform:translateX(-75px);transform:translateX(-75px)}to{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes e{0%{-webkit-transform:translateX(-75px);transform:translateX(-75px)}to{-webkit-transform:translateX(0);transform:translateX(0)}}.cf-page{padding-top:2.5em;padding-bottom:1.33333rem}.cf-page__title{font-size:2rem;line-height:1.2;font-weight:400}.cf-page__subtitle{color:#7d7d7d;font-weight:300}@media (min-width:49.2em){.cf-page{padding-bottom:2.66667rem}}.cf-progress{position:relative}.cf-progress__bar{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none}.cf-progress__bar::-webkit-progress-bar{background-color:#ebebeb;color:#ebebeb}.cf-progress__bar::-webkit-progress-value{background-color:#2f7bbf;color:#2f7bbf;-webkit-transition:width .5s ease;transition:width .5s ease}.cf-progress__bar::-moz-progress-bar{background-color:#2f7bbf;color:#2f7bbf}.cf-progress__items{list-style:none;margin:0;padding:0}.cf-progress__item{float:left;height:auto;padding:0;padding-top:7.5px;color:#7d7d7d;font-size:.86667em;text-align:center;cursor:pointer}.cf-progress__item:before{content:none}.cf-progress__item .cf-link{display:block;color:inherit;cursor:pointer}.cf-progress__item--active{color:#2f7bbf}.cf-progress__item--disabled{color:#dedede;cursor:default}@media (max-width:49.2em){.cf-progress__item{display:none;width:auto!important;float:none}.cf-progress__item--active{display:block}}.cf-radio__group .cf-radio:first-child{margin-top:0}.cf-radio__group .cf-radio{margin-top:1em}.cf-table{background:#fff;border-collapse:collapse;border-spacing:0;max-width:100%;width:100%;margin-bottom:1.5rem}.cf-table__head{background:#dedede}.cf-table__body+.cf-table__body{border-top:2px solid #dedede}.cf-table__cell{border-top:1px solid #dedede;line-height:1.5;padding:.73333rem;vertical-align:middle}.cf-table__cell--head{font-weight:600}.cf-table__cell--head:first-letter{text-transform:capitalize}.cf-table__head .cf-table__cell{vertical-align:bottom}.cf-table__row--info>.cf-table__cell{border-color:#4e96d4;background:#63a2d9}.cf-table__row--success>.cf-table__cell{border-color:#b1d567;background:#bbdb7b}.cf-table__row--warning>.cf-table__cell{border-color:#ffdf80;background:#ffe699}.cf-table__row--error>.cf-table__cell{border-color:#d83b3e;background:#dc5053}.cf-table__cell--align-left{text-align:left}.cf-table__cell--align-center{text-align:center}.cf-table__cell--align-right{text-align:right}@media (max-width:49.2em){.cf-table,.cf-table__body,.cf-table__cell,.cf-table__foot,.cf-table__head,.cf-table__row{display:block;width:100%;box-sizing:border-box}.cf-table__cell{border-top-width:0}.cf-table__cell:first-child{border-top:1px solid #dedede}}.cf-table--condensed .cf-table__cell{padding:.36667rem .86667rem}.cf-table--striped .cf-table__body>.cf-table__row--default:nth-child(odd)>.cf-table__cell{background:#fafafa}.cf-table--striped .cf-table__body>.cf-table__row--info:nth-child(odd)>.cf-table__cell{background:#5b9dd7}.cf-table--striped .cf-table__body>.cf-table__row--success:nth-child(odd)>.cf-table__cell{background:#b7d973}.cf-table--striped .cf-table__body>.cf-table__row--warning:nth-child(odd)>.cf-table__cell{background:#ffe38f}.cf-table--striped .cf-table__body>.cf-table__row--error:nth-child(odd)>.cf-table__cell{background:#db484a}.cf-table--hover .cf-table__body>.cf-table__row--default:hover>.cf-table__cell{background:#f0f0f0}.cf-table--hover .cf-table__body>.cf-table__row--info:hover>.cf-table__cell{background:#5b9dd7}.cf-table--hover .cf-table__body>.cf-table__row--success:hover>.cf-table__cell{background:#b7d973}.cf-table--hover .cf-table__body>.cf-table__row--warning:hover>.cf-table__cell{background:#ffe38f}.cf-table--hover .cf-table__body>.cf-table__row--error:hover>.cf-table__cell{background:#db484a}.cf-table--bordered{border:1px solid #dedede;border-collapse:separate;*border-collapse:collapse;border-left:0}.cf-table--bordered .cf-table__cell{border-left:1px solid #dedede}.cf-table--bordered .cf-table__body:first-child .cf-table__row:first-child .cf-table__cell,.cf-table--bordered .cf-table__head:first-child .cf-table__row:first-child .cf-table__cell{border-top:0}.cf-tabs__group{display:table;width:100%;margin:0 0 22.5px;padding:0;list-style:none}.cf-tabs__item{display:table-cell;position:relative;margin:0;padding:1.5rem 1rem;vertical-align:middle;text-align:center;background:#fff;color:#2f7bbf;cursor:pointer}.cf-tabs__item:before{content:"";display:block;position:absolute;top:100%;left:50%;height:0;width:0;margin-left:0;border:0 solid transparent;border-top-color:#2f7bbf;-webkit-transition:all .2s ease;transition:all .2s ease}.cf-tabs__item+.cf-tabs__item{border-left:1px solid #ebebeb}.cf-tabs__item:focus{outline:none}.cf-tabs__item:focus:after{content:"";display:block;position:absolute;top:0;bottom:0;left:0;right:0}.cf-tabs__item:hover{background:#e6e6e6;color:#2f7bbf}.cf-tabs__item.cf-tabs__item--active,.cf-tabs__item:active{background:#2f7bbf;color:#fff}.cf-tabs__item.cf-tabs__item--active:before,.cf-tabs__item:active:before{border-width:16px;margin-left:-16px}.cf-text--normal{font-size:1rem;font-weight:400}.cf-text--small{font-size:.8em;line-height:1.3}.cf-text--start{text-align:left}.cf-text--center{text-align:center}.cf-text--justify{text-align:justify}.cf-text--end{text-align:right}.cf-text--capitalize{text-transform:capitalize}.cf-text--titlecase:first-word{text-transform:capitalize}.cf-text--lowercase{text-transform:lowercase}.cf-text--uppercase{text-transform:uppercase}.cf-text--info{color:#2f7bbf}.cf-text--success{color:#9bca3e}.cf-text--warning{color:#ff7900}.cf-text--error{color:#bd2527}.cf-text--muted{color:#7d7d7d}.cf-textarea{width:100%}.cf-toggle{display:block;position:relative;height:2.26667rem;width:5.334rem;border-radius:2px;border:1px solid #aaa;cursor:pointer}.cf-toggle:after,.cf-toggle:before{display:block;position:absolute;top:0;bottom:0;width:50%;line-height:2.26667rem;text-align:center}.cf-toggle:before{content:"On";left:0;background:#9bca3e;color:#fff}.cf-toggle:after{content:"Off";right:0;background:gray;color:#fff}.cf-toggle__handle{display:block;position:absolute;z-index:1;top:0;bottom:0;left:0;width:50%;border:inherit;border-width:0;border-right-width:inherit;background:#fff;-webkit-transition:left .1s ease;transition:left .1s ease}.cf-toggle--active .cf-toggle__handle{border-right-width:0;border-left-width:inherit;left:50%}.tooltip{position:absolute;display:none;max-width:100%;max-height:100%}.tooltip-open{display:block}.tooltip-content{position:relative;padding:.5rem 1rem;font-size:.8rem;font-family:inherit;background:#000;color:#fff;border-radius:2px}.tooltip-content:before{content:"";display:block;position:absolute;width:0;height:0;border:5px solid transparent}.tooltip-element-attached-bottom.tooltip-element-attached-center .tooltip-content{margin-bottom:5px}.tooltip-element-attached-bottom.tooltip-element-attached-center .tooltip-content:before{top:100%;left:50%;margin-left:-5px;border-top-color:#000}.tooltip-element-attached-top.tooltip-element-attached-center .tooltip-content{margin-top:5px}.tooltip-element-attached-top.tooltip-element-attached-center .tooltip-content:before{bottom:100%;left:50%;margin-left:-5px;border-bottom-color:#000}.tooltip-element-attached-middle.tooltip-element-attached-right .tooltip-content{margin-right:5px}.tooltip-element-attached-middle.tooltip-element-attached-right .tooltip-content:before{left:100%;top:50%;margin-top:-5px;border-left-color:#000}.tooltip-element-attached-middle.tooltip-element-attached-left .tooltip-content{margin-left:5px}.tooltip-element-attached-middle.tooltip-element-attached-left .tooltip-content:before{right:100%;top:50%;margin-top:-5px;border-right-color:#000}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-bottom .tooltip-content{margin-top:5px}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-bottom .tooltip-content:before{bottom:100%;left:5px;border-bottom-color:#000}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-bottom .tooltip-content{margin-top:5px}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-bottom .tooltip-content:before{bottom:100%;right:5px;border-bottom-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-top .tooltip-content{margin-bottom:5px}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-top .tooltip-content:before{top:100%;left:5px;border-top-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-top .tooltip-content{margin-bottom:5px}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-top .tooltip-content:before{top:100%;right:5px;border-top-color:#000}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content{margin-right:5px}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content:before{top:5px;left:100%;border-left-color:#000}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content{margin-left:5px}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content:before{top:5px;right:100%;border-right-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content{margin-right:5px}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content:before{bottom:5px;left:100%;border-left-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content{margin-left:5px}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content:before{bottom:5px;right:100%;border-right-color:#000} +@font-face{font-family:cloudflare-font;src:url(../fonts/cloudflare-font.eot);src:url(../fonts/cloudflare-font.eot?#iefix) format("embedded-opentype"),url(../fonts/cloudflare-font.woff) format("woff"),url(../fonts/cloudflare-font.ttf) format("truetype"),url(../fonts/cloudflare-font.svg#cloudflare-font) format("svg");font-weight:400;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-300.eot);src:url(../fonts/opensans-300.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-300.woff2) format("woff2"),url(../fonts/opensans-300.woff) format("woff"),url(../fonts/opensans-300.ttf) format("truetype");font-weight:300;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-300i.eot);src:url(../fonts/opensans-300i.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-300i.woff2) format("woff2"),url(../fonts/opensans-300i.woff) format("woff"),url(../fonts/opensans-300i.ttf) format("truetype");font-weight:300;font-style:italic}@font-face{font-family:Open Sans;src:url(../fonts/opensans-400.eot);src:url(../fonts/opensans-400.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-400.woff2) format("woff2"),url(../fonts/opensans-400.woff) format("woff"),url(../fonts/opensans-400.ttf) format("truetype");font-weight:400;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-400i.eot);src:url(../fonts/opensans-400i.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-400i.woff2) format("woff2"),url(../fonts/opensans-400i.woff) format("woff"),url(../fonts/opensans-400i.ttf) format("truetype");font-weight:400;font-style:italic}@font-face{font-family:Open Sans;src:url(../fonts/opensans-600.eot);src:url(../fonts/opensans-600.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-600.woff2) format("woff2"),url(../fonts/opensans-600.woff) format("woff"),url(../fonts/opensans-600.ttf) format("truetype");font-weight:600;font-style:normal}@font-face{font-family:Open Sans;src:url(../fonts/opensans-700.eot);src:url(../fonts/opensans-700.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-700.woff2) format("woff2"),url(../fonts/opensans-700.woff) format("woff"),url(../fonts/opensans-700.ttf) format("truetype");font-weight:700;font-style:normal}.cf-btn:focus,.cf-checkbox__input:focus,.cf-dropdown__link a:focus,.cf-input:focus,.cf-link:focus,.cf-radio__input:focus,.cf-tabs__item:focus:after,.cf-textarea:focus,.cf-toggle__checkbox:focus~.cf-toggle__handle{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-1px}.cf-toggle__checkbox,.cf-toggle__label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.cf-checkbox__input,.cf-input,.cf-radio__input,.cf-textarea{z-index:0;width:100%;margin:0 0 .75rem;padding:.45em .75em;border:1px solid #bdbdbd;vertical-align:middle;font-family:Open Sans,Helvetica,Arial,sans-serif;font-size:.86667em;background:#fff;color:#333;outline:none;-webkit-transition:border-color .2s ease;transition:border-color .2s ease}.cf-checkbox__input:hover,.cf-input:hover,.cf-radio__input:hover,.cf-textarea:hover{border-color:#256298}.cf-checkbox__input:focus,.cf-input:focus,.cf-radio__input:focus,.cf-textarea:focus{border-color:#2f7bbf}.cf-input,.cf-textarea{border-radius:2px}.cf-checkbox__group,.cf-radio__group{text-align:left;display:inline-block;vertical-align:middle}.cf-checkbox,.cf-radio{cursor:pointer;display:block;min-height:1em;padding-left:2em}.cf-checkbox:hover input,.cf-radio:hover input{border-color:#256298}.cf-checkbox__input,.cf-radio__input{position:relative;height:15px;width:15px;margin:1px 0 0;padding:0;line-height:normal;-webkit-appearance:none;-moz-appearance:none;appearance:none;top:-1px}.cf-checkbox__input:before,.cf-radio__input:before{content:'';position:absolute;background-color:transparent;color:transparent;-webkit-text-stroke:0;-webkit-transition:all .15s ease-out;transition:all .15s ease-out}.cf-checkbox__input{border-radius:2px}.cf-checkbox__input:before{content:'\f009';font-family:cloudflare-font;font-size:15px;left:-1px;top:-1px}.cf-checkbox--checked .cf-checkbox__input:before{color:#333}.cf-radio__input,.cf-radio__input:before{border-radius:50%}.cf-radio__input:before{height:3px;width:3px;top:5px;left:5px}.cf-radio--checked .cf-radio__input:before{background-color:#333;height:7px;width:7px;top:3px;left:3px}.cf-checkbox__label,.cf-radio__label{display:inline;font-size:.86667em;margin-bottom:.38333em;margin-left:1em;min-height:1.22em}.cf-card__toolbar:after,.cf-form__fieldset:after,.cf-modal__footer:after,.cf-progress__items:after{content:"";display:table;clear:both}.cf-btn__group{position:relative;display:inline-block;font-size:0;vertical-align:middle;white-space:nowrap}.cf-btn__group>*{font-size:1rem}.cf-btn__group+.cf-btn__group{margin-left:.4rem}.cf-btn__group .cf-btn{border-radius:0}.cf-btn__group .cf-btn:first-child{border-top-left-radius:2px;border-bottom-left-radius:2px}.cf-btn__group .cf-btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}.cf-btn__group .cf-btn~.cf-btn{margin-left:-1px}.cf-btn{display:inline-block;position:relative;margin:0;padding:.6em 1em .53333em;border:none;border-bottom:1px solid;background:transparent;border-radius:2px;font-size:.93333rem;font-weight:400;font-family:inherit;line-height:1.2;text-align:center;-webkit-text-stroke:0;-webkit-font-smoothing:subpixel-antialiased;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;-webkit-transition:all .2s ease;transition:all .2s ease}.cf-btn::-moz-focus-inner{padding:0;border:0}.cf-btn+.cf-btn{margin-left:.4rem}.cf-btn--default,.cf-btn--delete,.cf-btn--edit,.cf-btn--note{background-color:#dedede;border-color:#ccc;color:#333}.cf-btn--default:hover,.cf-btn--delete:hover,.cf-btn--edit:hover,.cf-btn--note:hover{background-color:#ccc;border-color:#bababa;color:#333}.cf-btn--default.cf-btn--active,.cf-btn--default:active,.cf-btn--delete.cf-btn--active,.cf-btn--delete:active,.cf-btn--edit.cf-btn--active,.cf-btn--edit:active,.cf-btn--note.cf-btn--active,.cf-btn--note:active{background-color:#bababa;border-color:#a8a8a8;color:#333}.cf-btn--default:focus,.cf-btn--delete:focus,.cf-btn--edit:focus,.cf-btn--note:focus{box-shadow:inset 0 0 0 1px #a8a8a8;color:#333}.cf-btn--primary{background-color:#2f7bbf;border-color:#286aa4;color:#fff}.cf-btn--primary:hover{background-color:#286aa4;border-color:#215887;color:#fff}.cf-btn--primary.cf-btn--active,.cf-btn--primary:active{background-color:#215887;border-color:#1a456b;color:#fff}.cf-btn--primary:focus{box-shadow:inset 0 0 0 1px #1a456b;color:#fff}.cf-btn--accept,.cf-btn--success{background-color:#9bca3e;border-color:#89b431;color:#fff}.cf-btn--accept:hover,.cf-btn--success:hover{background-color:#89b431;border-color:#73982a;color:#fff}.cf-btn--accept.cf-btn--active,.cf-btn--accept:active,.cf-btn--success.cf-btn--active,.cf-btn--success:active{background-color:#73982a;border-color:#5e7c22;color:#fff}.cf-btn--accept:focus,.cf-btn--success:focus{box-shadow:inset 0 0 0 1px #5e7c22;color:#fff}.cf-btn--warning{background-color:#ff7900;border-color:#db6600;color:#fff}.cf-btn--warning:hover{background-color:#db6600;border-color:#b85600;color:#fff}.cf-btn--warning.cf-btn--active,.cf-btn--warning:active{background-color:#b85600;border-color:#944500;color:#fff}.cf-btn--warning:focus{box-shadow:inset 0 0 0 1px #944500;color:#fff}.cf-btn--cancel,.cf-btn--danger{background-color:#bd2527;border-color:#9e1f21;color:#fff}.cf-btn--cancel:hover,.cf-btn--danger:hover{background-color:#9e1f21;border-color:#80191b;color:#fff}.cf-btn--cancel.cf-btn--active,.cf-btn--cancel:active,.cf-btn--danger.cf-btn--active,.cf-btn--danger:active{background-color:#80191b;border-color:#621315;color:#fff}.cf-btn--cancel:focus,.cf-btn--danger:focus{box-shadow:inset 0 0 0 1px #621315;color:#fff}.cf-btn--disabled{cursor:default;pointer-events:none;opacity:.5}.cf-btn--disabled[title]{pointer-events:auto}.cf-btn--link{background-color:transparent;border-color:transparent;color:#2f7bbf}.cf-btn--link:hover{color:#ff7900}.cf-btn--link.cf-btn--active,.cf-btn--link:active,.cf-btn--link:focus{color:#2f7bbf}.cf-btn--facebook i,.cf-btn--twitter i{vertical-align:baseline;font-size:1.33em}.cf-btn--twitter{background-color:#00aced;border-color:#00aced;color:#fff}.cf-btn--twitter:hover{background-color:#1fc3ff;border-color:#05bcff;color:#333}.cf-btn--facebook{background-color:#3b5998;border-color:#3b5998;color:#fff}.cf-btn--facebook:hover{background-color:#4b6eb9;border-color:#4262a9;color:#fff}.cf-btn--accept,.cf-btn--cancel,.cf-btn--delete,.cf-btn--edit,.cf-btn--note{min-height:2.425rem;width:0;overflow:hidden;padding:1.13333em;text-align:left;text-indent:-9999px;white-space:nowrap;font-family:cloudflare-font;font-weight:400;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:subpixel-antialiased}.cf-btn--accept:after,.cf-btn--cancel:after,.cf-btn--delete:after,.cf-btn--edit:after,.cf-btn--note:after{content:"\f009";display:block;position:absolute;height:100%;width:100%;top:53%;left:0;text-align:center;text-indent:0;font-size:225em;line-height:0;speak:none;-webkit-transition-delay:.2s;transition-delay:.2s}.cf-btn--accept:after,.cf-btn--accept:before,.cf-btn--cancel:after,.cf-btn--cancel:before,.cf-btn--delete:after,.cf-btn--delete:before,.cf-btn--edit:after,.cf-btn--edit:before,.cf-btn--note:after,.cf-btn--note:before{-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.cf-btn--accept:after{content:"\f009"}.cf-btn--cancel:after{content:"\f01a"}.cf-btn--delete:after{content:"\f01a"}.cf-btn--edit:after{content:"\f019"}.cf-btn--note:after{content:"\f013"}.cf-btn--block{display:block;margin-bottom:.4rem}.cf-btn--block+.cf-btn--block{margin-left:auto}.cf-btn--loading{color:#ededed;background-color:#ededed;opacity:.8;cursor:default}.cf-btn--loading:before{content:"";display:block;position:absolute;top:0;left:0;height:100%;width:100%;opacity:1;background:transparent url(../assets/spinner.gif) no-repeat 50%;-webkit-transform:scale(1);transform:scale(1);-webkit-animation:a .2s ease-in-out;animation:a .2s ease-in-out}.cf-btn--loading:focus{outline:none}.cf-btn--loading:focus,.cf-btn--loading:hover{background-color:#ededed;color:#ededed}@-webkit-keyframes a{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes a{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.cf-callout{margin:1rem;padding:1rem;border:1px solid transparent;border-radius:2px}.cf-callout--default{background-color:#333;border-color:#333;color:#fff}.cf-callout--info{background-color:#2f7bbf;border-color:#286aa4;color:#fff}.cf-callout__content{margin-top:0}.cf-card{margin-top:1rem;margin-bottom:1rem;padding:0;border:1px solid #dedede;background-color:#fff;border-radius:2px;-webkit-transition:all .35s ease;transition:all .35s ease}.cf-card__section{display:table;table-layout:fixed;width:100%}.cf-card__section+.cf-card__section{border-top:1px solid #dedede}.cf-card__section--error{border-left:3px solid #bd2527}.cf-card__title{font-weight:400;margin-bottom:1rem}.cf-card__footer_message{font-size:.8rem;color:#7d7d7d;line-height:1.3;margin-top:1.5em}.cf-card__messages{padding-top:.5rem}.cf-card__messages .card__messages+p{margin-top:1em}.cf-card__content{padding:1.5rem}.cf-card__control{position:relative;padding:2rem;border:0 solid #dedede;border-top-width:1px;background-color:#000;background-color:rgba(0,0,0,.06);text-align:center}@media (min-width:49.2em){.cf-card__content,.cf-card__control{display:table-cell}.cf-card__control{width:40%;border-left-width:1px;border-top-width:0;vertical-align:middle}}@media (min-width:66em){.cf-card__control{width:30%}}.cf-card__toolbar{min-height:2.96666rem}.cf-card__toolbar_links{float:right}.cf-card__toolbar_link{position:relative;display:inline-block;padding:.73333rem 2em .73333rem .5rem}.cf-card__toolbar_link:after{content:"\f003";font-family:cloudflare-font;font-style:normal;font-weight:400;margin-top:-.6em;position:absolute;top:50%;right:1rem;-webkit-transition:-webkit-transform .2s ease;transition:-webkit-transform .2s ease;transition:transform .2s ease;transition:transform .2s ease,-webkit-transform .2s ease}.cf-card__toolbar_link--open:after{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.cf-card__drawers_container{display:none}.cf-card__drawers_container--open{display:block}.cf-card__drawer--active{border-top:1px solid #dedede;padding:1.5rem}.cf-card .cf-table{margin-top:0;margin-bottom:0;border-width:0}.cf-card .cf-form{border-left-width:0;border-right-width:0}.cf-checkbox__group .cf-checkbox:first-child{margin-top:0}.cf-checkbox__group .cf-checkbox{margin-top:1em}.cf-code,.cf-code__block{background-color:#dedede;border:1px solid #d1d1d1;font-family:monaco,courier,monospace;border-radius:2px}.cf-code{display:inline-block;margin-left:.13333em;margin-right:.13333em;padding:0 .4em;vertical-align:baseline;color:#bd2527}.cf-code__block{display:block;width:100%;margin:2rem 0;padding:.5rem;font-size:.86667rem;color:#4d4d4d}.cf-code__block .cf-code{display:inherit;margin:auto;padding:auto;background:none;border:none;color:inherit}.cf-copyable-textarea{margin-top:1rem;cursor:pointer}.cf-copyable-textarea .cf-textarea{height:7rem;word-break:break-all;cursor:text;resize:none;color:#333;font-family:monaco,courier,monospace}.cf-copyable-textarea__help-text{font-size:.8em;color:#7d7d7d;margin-top:-.5em;margin-bottom:1em}.cf-dropdown{position:absolute;z-index:1;min-width:10.66667rem;margin:.5em 0 0;padding:.33333rem 0;list-style:none;background:#fff;border:1px solid #dedede;border-radius:2px;box-shadow:0 3px 10px rgba(0,0,0,.2);-webkit-animation:b .15s ease-out;animation:b .15s ease-out}.cf-dropdown:before{content:"";display:block;position:absolute;bottom:100%;border:solid transparent;border-width:10px;border-top-width:0;border-bottom-color:#fff}@-webkit-keyframes b{0%{display:none;opacity:0}1%{display:block;opacity:0;top:80%}to{display:none;opacity:1;top:102%}}@keyframes b{0%{display:none;opacity:0}1%{display:block;opacity:0;top:80%}to{display:none;opacity:1;top:102%}}.cf-dropdown--left{left:0}.cf-dropdown--left:before{left:10px}.cf-dropdown--right{right:0}.cf-dropdown--right:before{right:10px}.cf-dropdown__link{position:relative;z-index:1}.cf-dropdown__link a{display:block;padding:.2rem 1.06667rem;cursor:pointer;white-space:nowrap}.cf-dropdown__link a:hover{color:#fff;background:#2f7bbf}.cf-dropdown__link a:focus{color:#fff;background:#63a2d9}.cf-dropdown__link a:active{color:#fff;background:#112d46}.cf-dropdown__link:first-child{border-top-width:0}.cf-dropdown__separator{margin:.53333rem 0;border-top:1px solid #dedede}.cf-flex--thin .cf-flex__item+.cf-flex__item{margin-top:.4rem}.cf-flex--wide .cf-flex__item+.cf-flex__item{margin-top:1.33333rem}@media (min-width:49.2em){.cf-flex{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.cf-flex__item{-webkit-box-flex:1;-webkit-flex:1 0;-ms-flex:1 0;flex:1 0}.cf-flex__item--collapse{-webkit-box-flex:0;-webkit-flex:0 auto;-ms-flex:0 auto;flex:0 auto}.cf-flex--thin .cf-flex__item+.cf-flex__item{margin-top:0;margin-left:.4rem}.cf-flex--wide .cf-flex__item+.cf-flex__item{margin-top:0;margin-left:1.33333rem}}.cf-form{background:#fff;border:1px solid #dedede;box-shadow:0 1px 1px rgba(0,0,0,.05)}.cf-form__header{padding:1em}.cf-form__footer{padding:1em;border-top:1px solid #dedede;text-align:right}.cf-form__title{margin:0}.cf-form__fieldset{margin:0;padding:0;border:none;}.cf-form__fieldset:last-child{border-bottom:none}.cf-form__fieldset_legend{padding:1em;margin-bottom:0;border-bottom:none}.cf-form__fieldset_content{padding:1em;border:0 solid #dedede;border-top-width:1px;background:#eee;padding-top:0;}.cf-form__label{display:block;margin-bottom:.2em;color:#333}.cf-form .cf-checkbox,.cf-form .cf-input,.cf-form .cf-radio,.cf-form .cf-textarea{margin-bottom:0}.cf-form__label{font-size:.86667em}.cf-form__label--hidden{display:none}.cf-form__field-error{position:relative;margin-top:.2em;padding:.5em 1em;border:1px solid #9e1f21;font-size:.8em;font-weight:600;background:#bd2527;color:#fff;-webkit-font-smoothing:antialiased;border-radius:2px;box-shadow:0 1px 1px rgba(0,0,0,.1)}.cf-form__field-error:after,.cf-form__field-error:before{content:"";display:block;position:absolute;bottom:100%;border-style:solid;border-color:transparent}.cf-form__field-error:before{left:4px;border-width:6px;border-bottom-color:#9e1f21}.cf-form__field-error:after{left:5px;border-width:5px;border-bottom-color:#bd2527}.cf-form__field-error p{margin-top:0;margin-bottom:0}.cf-form__field-error p+p{margin-top:.5em}@media (min-width:720px){.cf-form--horizontal .cf-form__fieldset_legend{width:30%;float:left;padding:1.7em 1rem;color:#333;text-align:right}.cf-form--horizontal .cf-form__fieldset_content{width:70%;float:left;border-top-width:0;border-left-width:1px}}.cf-heading{font-weight:700}.cf-heading__caption{color:#7d7d7d;font-size:80%;margin-left:.5em}.cf-heading--1{font-size:2rem;line-height:1.2;font-weight:400}.cf-heading--2{font-size:1.6rem;line-height:1.3}.cf-heading--3{font-size:1.46667rem;line-height:1.3}.cf-heading--4{font-size:1.2rem;line-height:1.3}.cf-heading--5{font-size:1rem;line-height:1.5}.cf-heading--6{font-size:.93333rem;line-height:1.5}.cf-icon{display:inline;width:auto;height:auto;margin-top:0;line-height:normal;vertical-align:baseline;font-family:cloudflare-font;font-weight:400;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:none;background-position:0 0;background-repeat:repeat}.cf-icon:before{display:inline-block;text-decoration:inherit;speak:none}.cf-icon__label{display:inline-block;width:0;height:0;overflow:hidden}.cf-icon--border{border:1px solid #333;padding:.2em .25em .15em;border-radius:2px}.cf-icon--spin{display:inline-block;-webkit-animation:c 2s infinite linear;animation:c 2s infinite linear}@-webkit-keyframes c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.cf-icon--muted{color:#333}.cf-icon--white{color:#fff}.cf-icon--2x{font-size:2em}.cf-icon--2x.cf-icon--border{border-width:2px}.cf-icon--3x{font-size:3em}.cf-icon--3x.cf-icon--border{border-width:3px}.cf-icon--4x{font-size:4em}.cf-icon--4x.cf-icon--border{border-width:4px}.cf-icon--large{vertical-align:-10%;font-size:1.3333333333333335em}.cf-icon--xlarge{font-size:2.4em}.cf-icon--caret-up:before,.cf-icon--chevron-up:before{content:"\f000"}.cf-icon--caret-down:before,.cf-icon--chevron-down:before{content:"\f001"}.cf-icon--caret-left:before,.cf-icon--chevron-left:before{content:"\f002"}.cf-icon--caret-right:before,.cf-icon--chevron-right:before{content:"\f003"}.cf-icon--ok-sign:before{content:"\f004"}.cf-icon--exclamation-sign:before{content:"\f005"}.cf-icon--info-sign:before{content:"\f006"}.cf-icon--pause:before{content:"\f007"}.cf-icon--time:before{content:"\f008"}.cf-icon--ok:before{content:"\f009"}.cf-icon--clipboard:before{content:"\f00a"}.cf-icon--bolt:before{content:"\f00b"}.cf-icon--chart:before{content:"\f00c"}.cf-icon--drive:before{content:"\f00d"}.cf-icon--filter:before{content:"\f00e"}.cf-icon--flowchart:before{content:"\f00f"}.cf-icon--hamburger:before{content:"\f010"}.cf-icon--lock:before{content:"\f011"}.cf-icon--list:before{content:"\f012"}.cf-icon--file:before{content:"\f013"}.cf-icon--shield:before{content:"\f014"}.cf-icon--plus:before{content:"\f015"}.cf-icon--happy:before{content:"\f016"}.cf-icon--sad:before{content:"\f017"}.cf-icon--search:before{content:"\f018"}.cf-icon--wrench:before{content:"\f019"}.cf-icon--remove-sign:before,.cf-icon--remove:before{content:"\f01a"}.cf-icon--speech:before{content:"\f01b"}.cf-icon--gear:before{content:"\f01c"}.cf-icon--help:before{content:"\f01d"}.cf-icon--widen:before{content:"\f022"}.cf-icon--calendar:before{content:"\f01e"}.cf-icon--facebook:before{content:"\f01f"}.cf-icon--twitter:before{content:"\f020"}.cf-icon--googleplus:before{content:"\f021"}.cf-icon--linkedin:before{content:"\f022"}.cf-icon--resize-horizontal:before{content:"\f024"}.cf-icon--upload:before{content:"\f025"}.cf-icon--loading{background:transparent url(../assets/spinner.gif) no-repeat 50%}.cf-icon--loading:before{content:"";width:1.06733rem}.cf-icon--close:before{content:'\00D7';font-family:Open Sans,Helvetica,Arial,sans-serif}.cf-label{display:inline-block;padding:.26667em .4em;font-size:.86667rem;line-height:1rem;vertical-align:baseline;white-space:nowrap;color:#fff;font-weight:600;text-transform:uppercase;-webkit-text-stroke:0;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.cf-label--default{background:#7d7d7d}.cf-label--info{background:#2f7bbf}.cf-label--success{background:#9bca3e}.cf-label--warning{background:#ff7900}.cf-label--error{background:#bd2527}.cf-layout__container{padding:0 1.5em;max-width:90%;margin:0 auto}.cf-layout__row{clear:both}.cf-layout__column{float:left}@media (max-width:49.2em){.cf-layout__container{padding:0;max-width:none}.cf-layout__column{width:100%!important;float:none}}.cf-link{color:#2f7bbf;outline:none;text-decoration:none;-webkit-transition:all .15s ease;transition:all .15s ease;cursor:pointer}.cf-link:hover{color:#ff7900}.cf-link:focus{color:#63a2d9}.cf-link:active{color:#112d46;outline:none}.cf-list{list-style-type:disc;list-style-position:outside;margin-left:3em}.cf-list--ordered{list-style-type:decimal}.cf-list--unstyled{list-style-type:none;margin-left:0}.cf-modal__backdrop-scroller{position:fixed;top:0;bottom:0;left:0;right:0;z-index:1050;overflow:auto;overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.cf-modal__backdrop-outer{position:relative;width:100%;height:100%;display:table}.cf-modal__backdrop{display:table-cell;vertical-align:middle;padding:1.5rem;background:#000;background:rgba(0,0,0,.7);-webkit-transform-origin:center;transform-origin:center}.cf-modal{position:relative;width:100%;max-width:30rem;margin:0 auto;background:#fff;-webkit-transform-origin:center;transform-origin:center;-webkit-backface-visibility:hidden;backface-visibility:hidden;border-radius:2px;box-shadow:0 1px 15px rgba(0,0,0,.75)}.cf-modal:focus{outline:none}.cf-modal__body,.cf-modal__footer,.cf-modal__header{position:relative;padding:1.5rem}.cf-modal__header+.cf-modal__body{padding-top:0}.cf-modal__title{font-weight:400;word-break:break-all;margin-bottom:.75rem}.cf-modal__title .cf-heading{font-weight:inherit}.cf-modal__close{cursor:pointer;right:1.5rem;top:1rem;position:absolute;line-height:.6}.cf-modal__footer{background-color:#ebebeb}.cf-modal__footer--simple{background-color:transparent}.cf-modal__actions{float:right}.cf-modal--confirm .cf-modal__footer{padding-top:0}.cf-transition-modal-appear .cf-modal__backdrop,.cf-transition-modal-enter .cf-modal__backdrop,.cf-transition-modal-leave.cf-transition-modal-leave-active .cf-modal__backdrop{background:transparent}.cf-transition-modal-appear.cf-transition-modal-appear-active .cf-modal__backdrop,.cf-transition-modal-enter.cf-transition-modal-enter-active .cf-modal__backdrop,.cf-transition-modal-leave .cf-modal__backdrop{background:#000;background:rgba(0,0,0,.7)}.cf-transition-modal-appear-active .cf-modal__backdrop,.cf-transition-modal-enter-active .cf-modal__backdrop,.cf-transition-modal-leave-active .cf-modal__backdrop{-webkit-transition:background .2s ease-in;transition:background .2s ease-in}.cf-transition-modal-appear .cf-modal,.cf-transition-modal-enter .cf-modal,.cf-transition-modal-leave.cf-transition-modal-leave-active .cf-modal{opacity:0;-webkit-transform:matrix3d(1,0,0,0,0,1,0,-.0002,0,0,1,0,0,-10,0,1.1);transform:matrix3d(1,0,0,0,0,1,0,-.0002,0,0,1,0,0,-10,0,1.1)}.cf-transition-modal-appear.cf-transition-modal-appear-active .cf-modal,.cf-transition-modal-enter.cf-transition-modal-enter-active .cf-modal,.cf-transition-modal-leave .cf-modal{opacity:1;-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}.cf-transition-modal-appear-active .cf-modal,.cf-transition-modal-enter-active .cf-modal,.cf-transition-modal-leave-active .cf-modal{-webkit-transition:opacity .2s ease,-webkit-transform .2s ease;transition:opacity .2s ease,-webkit-transform .2s ease;transition:opacity .2s ease,transform .2s ease;transition:opacity .2s ease,transform .2s ease,-webkit-transform .2s ease}.cf-modal .cf-form{border-left-width:0;border-right-width:0}.cf-modal .cf-form__fieldset_legend{font-size:.86667em}.cf-notifications{margin-top:.5em;margin-bottom:.5em}.cf-notifications__item{position:relative;padding:.5rem 2.5rem;padding-right:2.5rem;border:1px solid;vertical-align:middle;-webkit-text-stroke:0;border-radius:2px;cursor:pointer;-webkit-font-smoothing:antialiased}.cf-notifications__item:before{font-family:cloudflare-font;font-size:1.25rem;position:absolute;top:50%;left:.75rem;-webkit-transform:translateY(-50%);transform:translateY(-50%);line-height:1;vertical-align:middle}.cf-notifications__item+.cf-notifications__item{margin-top:2px}.cf-notifications__global_container{position:fixed;bottom:0;left:0;right:0;max-height:25%;overflow:auto;z-index:1100}.cf-notifications__global_container .cf-notifications{margin-top:0;margin-bottom:0}.cf-notifications__global_container .cf-notifications__item{border-radius:0;border-left-width:0;border-right-width:0;-webkit-transform-origin:bottom left;transform-origin:bottom left;-webkit-animation:d .2s ease-in-out;animation:d .2s ease-in-out}.cf-notifications__global_container .cf-notifications__item:before{-webkit-animation:e .2s ease-out;animation:e .2s ease-out}.cf-notifications__global_container .cf-notifications__item+.cf-notifications__item{margin-top:0;border-top-width:0}.cf-notifications__item_progress{position:absolute;z-index:1;top:0;bottom:0;left:0;width:100%;background:#fff;background:hsla(0,0%,100%,.1)}.cf-notifications__item_progress--active{width:0;-webkit-transition:width 0s linear;transition:width 0s linear}.cf-notifications__item_close{position:absolute;z-index:3;top:0;right:0;bottom:0;width:2.5em;cursor:pointer}.cf-notifications__item_close:hover{background:#000;background:rgba(0,0,0,.1)}.cf-notifications__item_close:before{content:'\00D7';position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:1.25rem}.cf-notifications__item_message{position:relative;z-index:2}.cf-notifications__item--success{background-color:#89b431;border-color:#89b431;color:#fff}.cf-notifications__item--success:before{content:'\f004'}.cf-notifications__item--error{background-color:#bd2527;border-color:#9e1f21;color:#fff}.cf-notifications__item--error:before{content:'\f005'}.cf-notifications__item--info{background-color:#2f7bbf;border-color:#286aa4;color:#fff}.cf-notifications__item--info:before{content:'\f006'}.cf-notifications__item--warning{background-color:#ff7900;border-color:#db6600;color:#fff}.cf-notifications__item--warning:before{content:'\f005'}@-webkit-keyframes d{0%{-webkit-transform:scaleY(0);transform:scaleY(0)}to{-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes d{0%{-webkit-transform:scaleY(0);transform:scaleY(0)}to{-webkit-transform:scaleY(1);transform:scaleY(1)}}@-webkit-keyframes e{0%{-webkit-transform:translateX(-75px);transform:translateX(-75px)}to{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes e{0%{-webkit-transform:translateX(-75px);transform:translateX(-75px)}to{-webkit-transform:translateX(0);transform:translateX(0)}}.cf-page{padding-top:2.5em;padding-bottom:1.33333rem}.cf-page__title{font-size:2rem;line-height:1.2;font-weight:400}.cf-page__subtitle{color:#7d7d7d;font-weight:300}@media (min-width:49.2em){.cf-page{padding-bottom:2.66667rem}}.cf-progress{position:relative}.cf-progress__bar{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none}.cf-progress__bar::-webkit-progress-bar{background-color:#ebebeb;color:#ebebeb}.cf-progress__bar::-webkit-progress-value{background-color:#2f7bbf;color:#2f7bbf;-webkit-transition:width .5s ease;transition:width .5s ease}.cf-progress__bar::-moz-progress-bar{background-color:#2f7bbf;color:#2f7bbf}.cf-progress__items{list-style:none;margin:0;padding:0}.cf-progress__item{float:left;height:auto;padding:0;padding-top:7.5px;color:#7d7d7d;font-size:.86667em;text-align:center;cursor:pointer}.cf-progress__item:before{content:none}.cf-progress__item .cf-link{display:block;color:inherit;cursor:pointer}.cf-progress__item--active{color:#2f7bbf}.cf-progress__item--disabled{color:#dedede;cursor:default}@media (max-width:49.2em){.cf-progress__item{display:none;width:auto!important;float:none}.cf-progress__item--active{display:block}}.cf-radio__group .cf-radio:first-child{margin-top:0}.cf-radio__group .cf-radio{margin-top:1em}.cf-table{background:#fff;border-collapse:collapse;border-spacing:0;max-width:100%;width:100%;margin-bottom:1.5rem}.cf-table__head{background:#dedede}.cf-table__body+.cf-table__body{border-top:2px solid #dedede}.cf-table__cell{border-top:1px solid #dedede;line-height:1.5;padding:.73333rem;vertical-align:middle}.cf-table__cell--head{font-weight:600}.cf-table__cell--head:first-letter{text-transform:capitalize}.cf-table__head .cf-table__cell{vertical-align:bottom}.cf-table__row--info>.cf-table__cell{border-color:#4e96d4;background:#63a2d9}.cf-table__row--success>.cf-table__cell{border-color:#b1d567;background:#bbdb7b}.cf-table__row--warning>.cf-table__cell{border-color:#ffdf80;background:#ffe699}.cf-table__row--error>.cf-table__cell{border-color:#d83b3e;background:#dc5053}.cf-table__cell--align-left{text-align:left}.cf-table__cell--align-center{text-align:center}.cf-table__cell--align-right{text-align:right}@media (max-width:49.2em){.cf-table,.cf-table__body,.cf-table__cell,.cf-table__foot,.cf-table__head,.cf-table__row{display:block;width:100%;box-sizing:border-box}.cf-table__cell{border-top-width:0}.cf-table__cell:first-child{border-top:1px solid #dedede}}.cf-table--condensed .cf-table__cell{padding:.36667rem .86667rem}.cf-table--striped .cf-table__body>.cf-table__row--default:nth-child(odd)>.cf-table__cell{background:#fafafa}.cf-table--striped .cf-table__body>.cf-table__row--info:nth-child(odd)>.cf-table__cell{background:#5b9dd7}.cf-table--striped .cf-table__body>.cf-table__row--success:nth-child(odd)>.cf-table__cell{background:#b7d973}.cf-table--striped .cf-table__body>.cf-table__row--warning:nth-child(odd)>.cf-table__cell{background:#ffe38f}.cf-table--striped .cf-table__body>.cf-table__row--error:nth-child(odd)>.cf-table__cell{background:#db484a}.cf-table--hover .cf-table__body>.cf-table__row--default:hover>.cf-table__cell{background:#f0f0f0}.cf-table--hover .cf-table__body>.cf-table__row--info:hover>.cf-table__cell{background:#5b9dd7}.cf-table--hover .cf-table__body>.cf-table__row--success:hover>.cf-table__cell{background:#b7d973}.cf-table--hover .cf-table__body>.cf-table__row--warning:hover>.cf-table__cell{background:#ffe38f}.cf-table--hover .cf-table__body>.cf-table__row--error:hover>.cf-table__cell{background:#db484a}.cf-table--bordered{border:1px solid #dedede;border-collapse:separate;*border-collapse:collapse;border-left:0}.cf-table--bordered .cf-table__cell{border-left:1px solid #dedede}.cf-table--bordered .cf-table__body:first-child .cf-table__row:first-child .cf-table__cell,.cf-table--bordered .cf-table__head:first-child .cf-table__row:first-child .cf-table__cell{border-top:0}.cf-tabs__group{display:table;width:100%;margin:0 0 22.5px;padding:0;list-style:none}.cf-tabs__item{display:table-cell;position:relative;margin:0;padding:1.5rem 1rem;vertical-align:middle;text-align:center;background:#fff;color:#2f7bbf;cursor:pointer}.cf-tabs__item:before{content:"";display:block;position:absolute;top:100%;left:50%;height:0;width:0;margin-left:0;border:0 solid transparent;border-top-color:#2f7bbf;-webkit-transition:all .2s ease;transition:all .2s ease}.cf-tabs__item+.cf-tabs__item{border-left:1px solid #ebebeb}.cf-tabs__item:focus{outline:none}.cf-tabs__item:focus:after{content:"";display:block;position:absolute;top:0;bottom:0;left:0;right:0}.cf-tabs__item:hover{background:#e6e6e6;color:#2f7bbf}.cf-tabs__item.cf-tabs__item--active,.cf-tabs__item:active{background:#2f7bbf;color:#fff}.cf-tabs__item.cf-tabs__item--active:before,.cf-tabs__item:active:before{border-width:16px;margin-left:-16px}.cf-text--normal{font-size:1rem;font-weight:400}.cf-text--small{font-size:.8em;line-height:1.3}.cf-text--start{text-align:left}.cf-text--center{text-align:center}.cf-text--justify{text-align:justify}.cf-text--end{text-align:right}.cf-text--capitalize{text-transform:capitalize}.cf-text--titlecase:first-word{text-transform:capitalize}.cf-text--lowercase{text-transform:lowercase}.cf-text--uppercase{text-transform:uppercase}.cf-text--info{color:#2f7bbf}.cf-text--success{color:#9bca3e}.cf-text--warning{color:#ff7900}.cf-text--error{color:#bd2527}.cf-text--muted{color:#7d7d7d}.cf-textarea{width:100%}.cf-toggle{display:block;position:relative;height:2.26667rem;width:5.334rem;border-radius:2px;border:1px solid #aaa;cursor:pointer}.cf-toggle:after,.cf-toggle:before{display:block;position:absolute;top:0;bottom:0;width:50%;line-height:2.26667rem;text-align:center}.cf-toggle:before{content:"On";left:0;background:#9bca3e;color:#fff}.cf-toggle:after{content:"Off";right:0;background:gray;color:#fff}.cf-toggle__handle{display:block;position:absolute;z-index:1;top:0;bottom:0;left:0;width:50%;border:inherit;border-width:0;border-right-width:inherit;background:#fff;-webkit-transition:left .1s ease;transition:left .1s ease}.cf-toggle--active .cf-toggle__handle{border-right-width:0;border-left-width:inherit;left:50%}.tooltip{position:absolute;display:none;max-width:100%;max-height:100%}.tooltip-open{display:block}.tooltip-content{position:relative;padding:.5rem 1rem;font-size:.8rem;font-family:inherit;background:#000;color:#fff;border-radius:2px}.tooltip-content:before{content:"";display:block;position:absolute;width:0;height:0;border:5px solid transparent}.tooltip-element-attached-bottom.tooltip-element-attached-center .tooltip-content{margin-bottom:5px}.tooltip-element-attached-bottom.tooltip-element-attached-center .tooltip-content:before{top:100%;left:50%;margin-left:-5px;border-top-color:#000}.tooltip-element-attached-top.tooltip-element-attached-center .tooltip-content{margin-top:5px}.tooltip-element-attached-top.tooltip-element-attached-center .tooltip-content:before{bottom:100%;left:50%;margin-left:-5px;border-bottom-color:#000}.tooltip-element-attached-middle.tooltip-element-attached-right .tooltip-content{margin-right:5px}.tooltip-element-attached-middle.tooltip-element-attached-right .tooltip-content:before{left:100%;top:50%;margin-top:-5px;border-left-color:#000}.tooltip-element-attached-middle.tooltip-element-attached-left .tooltip-content{margin-left:5px}.tooltip-element-attached-middle.tooltip-element-attached-left .tooltip-content:before{right:100%;top:50%;margin-top:-5px;border-right-color:#000}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-bottom .tooltip-content{margin-top:5px}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-bottom .tooltip-content:before{bottom:100%;left:5px;border-bottom-color:#000}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-bottom .tooltip-content{margin-top:5px}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-bottom .tooltip-content:before{bottom:100%;right:5px;border-bottom-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-top .tooltip-content{margin-bottom:5px}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-top .tooltip-content:before{top:100%;left:5px;border-top-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-top .tooltip-content{margin-bottom:5px}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-top .tooltip-content:before{top:100%;right:5px;border-top-color:#000}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content{margin-right:5px}.tooltip-element-attached-top.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content:before{top:5px;left:100%;border-left-color:#000}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content{margin-left:5px}.tooltip-element-attached-top.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content:before{top:5px;right:100%;border-right-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content{margin-right:5px}.tooltip-element-attached-bottom.tooltip-element-attached-right.tooltip-target-attached-left .tooltip-content:before{bottom:5px;left:100%;border-left-color:#000}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content{margin-left:5px}.tooltip-element-attached-bottom.tooltip-element-attached-left.tooltip-target-attached-right .tooltip-content:before{bottom:5px;right:100%;border-right-color:#000} /*# sourceMappingURL=components.css.map */ From dfa56213addf215d4893b885757a17f697fb1639 Mon Sep 17 00:00:00 2001 From: Sachin Date: Tue, 20 Jun 2017 09:58:58 -0700 Subject: [PATCH 02/10] Yarn upgrade and new eslint rules --- .eslintrc.json | 73 +++++++ package.json | 14 +- webpack.config.js | 21 +- yarn.lock | 499 +++++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 567 insertions(+), 40 deletions(-) create mode 100644 .eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..5250bc3 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,73 @@ +{ + "parser": "babel-eslint", + "parserOptions": { + "ecmaVersion": 6, + "sourceType": "module", + "ecmaFeatures": { + "globalReturn": false, + "impliedStrict": true, + "jsx": true, + "experimentalObjectRestSpread": true + } + }, + "globals": { + "__webpack_public_path__": true, + "bootstrap": true, + "describe": true, + "it": true, + "beforeEach": true, + "afterEach": true, + "before": true, + "after": true, + "test": true, + "expect": true + }, + "env": { + "browser": true, + "node": true, + "es6": true + }, + "plugins": [ + "prettier", + "react", + "import", + "json", + "cflint", + "compat", + "mocha" + ], + "extends": [ + "plugin:react/recommended", + "plugin:import/errors", + "plugin:import/warnings" + ], + "rules": { + "mocha/no-exclusive-tests": 2, + "block-scoped-var": 2, + "default-case": 2, + "guard-for-in": 2, + "no-else-return": 2, + "no-floating-decimal": 2, + "no-self-compare": 2, + "no-void": 2, + "radix": 2, + "wrap-iife": ["error", "inside"], + "no-catch-shadow": 2, + "handle-callback-err": 2, + "camelcase": 0, + "no-unused-vars": [2, {"vars": "all", "args": "after-used"}], + "no-undef": [2, {"typeof": false}], + "react/prop-types": [2, {"skipUndeclared": true}], + "import/no-absolute-path": 2, + "import/no-deprecated": 1, + "import/no-mutable-exports": 1, + "import/no-extraneous-dependencies": 0, + "import/no-unresolved": 0, + "import/first": 1, + "prettier/prettier": [2, {"trailingComma": "none", "singleQuote": true}], + "compat/compat": 2 + }, + "settings": { + "import/resolver": "webpack" + } +} diff --git a/package.json b/package.json index e5ef5aa..421cbdd 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,9 @@ ], "testMatch": [ "**/test/**/*.js" + ], + "testPathIgnorePatterns": [ + "/node_modules/|_helpers" ] }, "repository": { @@ -65,7 +68,13 @@ "d3-format": "^1.0.2", "eslint": "^3.4.0", "eslint-loader": "^1.6.1", + "eslint-plugin-cflint": "^1.0.0", + "eslint-plugin-compat": "^1.0.3", + "eslint-plugin-import": "^2.3.0", + "eslint-plugin-json": "^1.2.0", + "eslint-plugin-mocha": "^4.10.1", "eslint-plugin-prettier": "^2.0.0", + "eslint-plugin-react": "^7.1.0", "history": "3.2.1", "intl": "^1.1.0", "jest": "^19.0.2", @@ -83,10 +92,13 @@ "react-test-renderer": "^15.4.2", "redux": "^3.0.4", "redux-logger": "^2.6.1", + "redux-mock-store": "^1.2.3", "redux-thunk": "^1.0.0", - "webpack": "^2.2.1" + "webpack": "^3.0.0" }, "dependencies": { + "cf-component-box": "^2.2.1", + "cf-style-provider": "^1.5.0", "prop-types": "^15.5.8" } } diff --git a/webpack.config.js b/webpack.config.js index e1ac919..a20445b 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -3,8 +3,9 @@ var webpack = require('webpack'); var isDev = process.env.NODE_ENV !== 'production'; var plugins = []; -if(!isDev) { - plugins.push(new webpack.optimize.UglifyJsPlugin({ +if (!isDev) { + plugins.push( + new webpack.optimize.UglifyJsPlugin({ compress: isDev, mangle: false }) @@ -12,11 +13,11 @@ if(!isDev) { } module.exports = { - entry: "./src/index.js", + entry: './src/index.js', devtool: isDev ? 'cheap-module-source-map' : false, output: { path: __dirname, - filename: "compiled.js" + filename: 'compiled.js' }, watch: isDev, module: { @@ -24,17 +25,9 @@ module.exports = { { test: /\.js$/, exclude: /node_modules/, - loader: 'babel-loader', - }, - { - test: /\.js$/, - exclude: /node_modules/, - enforce: 'pre', - use: [{ - loader: 'eslint-loader', - }], + loader: 'babel-loader' } ] }, plugins: plugins -}; \ No newline at end of file +}; diff --git a/yarn.lock b/yarn.lock index d191270..976717f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -51,10 +51,14 @@ acorn@^5.0.0, acorn@^5.0.1: version "5.0.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" -ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: +ajv-keywords@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" +ajv-keywords@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0" + ajv@^4.7.0, ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -62,6 +66,15 @@ ajv@^4.7.0, ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" +ajv@^5.1.5: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.0.tgz#c1735024c5da2ef75cc190713073d44f098bf486" + dependencies: + co "^4.6.0" + fast-deep-equal "^0.1.0" + json-schema-traverse "^0.3.0" + json-stable-stringify "^1.0.1" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -698,7 +711,7 @@ babel-register@^6.24.1: mkdirp "^0.5.1" source-map-support "^0.4.2" -babel-runtime@^6.18.0, babel-runtime@^6.22.0: +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" dependencies: @@ -784,6 +797,10 @@ boom@2.x.x: dependencies: hoek "2.x.x" +bowser@^1.6.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.7.0.tgz#169de4018711f994242bff9a8009e77a1f35e003" + brace-expansion@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59" @@ -860,6 +877,13 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" +browserslist@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.1.4.tgz#cc526af4a1312b7d2e05653e56d0c8ab70c0e053" + dependencies: + caniuse-lite "^1.0.30000670" + electron-to-chromium "^1.3.11" + bser@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169" @@ -888,7 +912,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -builtin-modules@^1.0.0: +builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -924,6 +948,14 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" +caniuse-db@1.0.30000671: + version "1.0.30000671" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000671.tgz#9f071bbc7b96994638ccbaf47829d58a1577a8ed" + +caniuse-lite@^1.0.30000670: + version "1.0.30000686" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000686.tgz#d9d9ec6110e5533be544a689003f7596532c67d3" + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -935,6 +967,15 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +cf-component-box@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cf-component-box/-/cf-component-box-2.2.1.tgz#05bc4bf26f5749c9183aea5d646ace140a16c5cb" + dependencies: + cf-style-const "^1.4.2" + cf-style-container "^1.2.0" + polished "^1.0.2" + prop-types "^15.5.8" + cf-component-button@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cf-component-button/-/cf-component-button-3.0.0.tgz#2c7eeecee5924a3674a374e13fd1eaaad1353309" @@ -1087,6 +1128,41 @@ cf-component-viewport@^2.2.1: prop-types "^15.5.8" react-responsive "^1.1.3" +cf-style-const@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/cf-style-const/-/cf-style-const-1.4.2.tgz#341f3c32ea404c2fad97f9518c4bce553ac8d7b1" + dependencies: + polished "^1.0.2" + +cf-style-container@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/cf-style-container/-/cf-style-container-1.2.0.tgz#df25dc1b538a377784ff0e7a2e8eee6681986be1" + dependencies: + fela "^5.0.0" + merge-options "0.0.64" + prop-types "^15.5.8" + react-fela "^5.0.0" + +cf-style-provider@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/cf-style-provider/-/cf-style-provider-1.5.0.tgz#a791a002bb45c1df2a315c46f304948fc79a36fa" + dependencies: + cf-style-const "^1.4.2" + cf-style-container "^1.2.0" + cssbeautify "^0.3.1" + fela "^5.0.0" + fela-beautifier "^5.0.0" + fela-monolithic "^5.0.0" + fela-plugin-embedded "^5.0.0" + fela-plugin-fallback-value "^5.0.0" + fela-plugin-lvha "^5.0.0" + fela-plugin-prefixer "^5.0.0" + fela-plugin-unit "^5.0.0" + fela-plugin-validator "^5.0.0" + inline-style-prefixer "^3.0.5" + prop-types "^15.5.8" + react-fela "^5.0.0" + cf-util-http@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/cf-util-http/-/cf-util-http-2.0.1.tgz#2e3a6f53fef3d45dd51982f0380add32996b13da" @@ -1157,6 +1233,13 @@ cli-width@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" +cli@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" + dependencies: + exit "0.1.2" + glob "^7.1.1" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -1217,7 +1300,7 @@ concat-stream@^1.5.2: readable-stream "^2.2.2" typedarray "^0.0.6" -console-browserify@^1.1.0: +console-browserify@1.1.x, console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" dependencies: @@ -1231,6 +1314,10 @@ constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + content-type-parser@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" @@ -1311,10 +1398,20 @@ crypto-browserify@^3.11.0: public-encrypt "^4.0.0" randombytes "^2.0.0" +css-in-js-utils@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-1.0.3.tgz#9ac7e02f763cf85d94017666565ed68a5b5f3215" + dependencies: + hyphenate-style-name "^1.0.2" + css-mediaquery@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0" +cssbeautify@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cssbeautify/-/cssbeautify-0.3.1.tgz#12dd1f734035c2e6faca67dcbdcef74e42811397" + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" @@ -1355,6 +1452,12 @@ debug@2, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: dependencies: ms "2.0.0" +debug@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1422,6 +1525,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + doctrine@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" @@ -1429,16 +1539,48 @@ doctrine@^2.0.0: esutils "^2.0.2" isarray "^1.0.0" +dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" +domelementtype@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + dependencies: + domelementtype "1" + +domutils@1.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" dependencies: jsbn "~0.1.0" +electron-to-chromium@^1.3.11: + version "1.3.14" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.14.tgz#64af0f9efd3c3c6acd57d71f83b49ca7ee9c4b43" + elliptic@^6.0.0: version "6.4.0" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" @@ -1470,6 +1612,10 @@ enhanced-resolve@^3.0.0: object-assign "^4.0.1" tapable "^0.2.5" +entities@1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" + entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" @@ -1562,6 +1708,14 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-import-resolver-node@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c" + dependencies: + debug "^2.2.0" + object-assign "^4.0.1" + resolve "^1.1.6" + eslint-loader@^1.6.1: version "1.7.1" resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.7.1.tgz#50b158dd6272dcefb97e984254837f81a5802ce0" @@ -1573,6 +1727,53 @@ eslint-loader@^1.6.1: object-hash "^1.1.4" rimraf "^2.6.1" +eslint-module-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce" + dependencies: + debug "2.2.0" + pkg-dir "^1.0.0" + +eslint-plugin-cflint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-cflint/-/eslint-plugin-cflint-1.0.0.tgz#84eb9b3c5a707793f83ea2c98f74b8684c0d76be" + +eslint-plugin-compat@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-compat/-/eslint-plugin-compat-1.0.3.tgz#0019e34eebb4512de6dc0351349bc132a322d292" + dependencies: + babel-runtime "^6.23.0" + browserslist "2.1.4" + caniuse-db "1.0.30000671" + requireindex "^1.1.0" + +eslint-plugin-import@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.3.0.tgz#37c801e0ada0e296cbdf20c3f393acb5b52af36b" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.2.0" + doctrine "1.5.0" + eslint-import-resolver-node "^0.2.0" + eslint-module-utils "^2.0.0" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + read-pkg-up "^2.0.0" + +eslint-plugin-json@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-json/-/eslint-plugin-json-1.2.0.tgz#9ba73bb0be99d50093e889f5b968463d2a30efae" + dependencies: + jshint "^2.8.0" + +eslint-plugin-mocha@^4.10.1: + version "4.10.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-mocha/-/eslint-plugin-mocha-4.10.1.tgz#c63ccb83933bdb01d2bef922332dc4c44b30f3f8" + dependencies: + ramda "^0.24.1" + eslint-plugin-prettier@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.1.1.tgz#2fb7e2ab961f2b61d2c8cf91bc17716ca8c53868" @@ -1580,6 +1781,14 @@ eslint-plugin-prettier@^2.0.0: fast-diff "^1.1.1" jest-docblock "^20.0.1" +eslint-plugin-react@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.1.0.tgz#27770acf39f5fd49cd0af4083ce58104eb390d4c" + dependencies: + doctrine "^2.0.0" + has "^1.0.1" + jsx-ast-utils "^1.4.1" + eslint@^3.4.0: version "3.19.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" @@ -1695,6 +1904,10 @@ exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" +exit@0.1.2, exit@0.1.x: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -1721,6 +1934,10 @@ extsprintf@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550" +fast-deep-equal@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-0.1.0.tgz#5c6f4599aba6b333ee3342e2ed978672f1001f8d" + fast-diff@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.1.tgz#0aea0e4e605b6a2189f0e936d4b7fbaf1b7cfd9b" @@ -1753,6 +1970,89 @@ fbjs@^0.8.4, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.9" +fela-beautifier@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-beautifier/-/fela-beautifier-5.0.1.tgz#92177dbfc65129ee59d6391730e46e0cf733c2a7" + dependencies: + cssbeautify "^0.3.1" + fela-utils "^5.0.1" + +fela-dom@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/fela-dom/-/fela-dom-5.0.2.tgz#8c10ce9ff2872eece4eb27fcbf5950eba1c76afa" + dependencies: + fela-tools "^5.0.1" + fela-utils "^5.0.1" + +fela-monolithic@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-monolithic/-/fela-monolithic-5.0.1.tgz#07ae241294e2d857b192377457126c4b9c64600a" + dependencies: + css-in-js-utils "^1.0.3" + fela-utils "^5.0.1" + +fela-plugin-embedded@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/fela-plugin-embedded/-/fela-plugin-embedded-5.0.2.tgz#462f01591f021360c13624fb2726891ec19f1c28" + dependencies: + fela-utils "^5.0.1" + +fela-plugin-fallback-value@^5.0.0, fela-plugin-fallback-value@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-plugin-fallback-value/-/fela-plugin-fallback-value-5.0.1.tgz#38bd2f926b34a077bf8f03a8eba0b85345edcbc5" + dependencies: + css-in-js-utils "^1.0.3" + fela-utils "^5.0.1" + +fela-plugin-lvha@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-plugin-lvha/-/fela-plugin-lvha-5.0.1.tgz#ea0d32dfd7e882a766ac1a791859975fd8f11fbc" + dependencies: + fela-utils "^5.0.1" + +fela-plugin-prefixer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-plugin-prefixer/-/fela-plugin-prefixer-5.0.1.tgz#a65127af265135e132193cd486fd1de22332a6a8" + dependencies: + css-in-js-utils "^1.0.3" + fela-plugin-fallback-value "^5.0.1" + fela-utils "^5.0.1" + inline-style-prefixer "^3.0.0" + +fela-plugin-unit@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-plugin-unit/-/fela-plugin-unit-5.0.1.tgz#39b7fcaba5c59cebb29168d507eb3e38922a86b0" + dependencies: + css-in-js-utils "^1.0.3" + fela-utils "^5.0.1" + +fela-plugin-validator@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-plugin-validator/-/fela-plugin-validator-5.0.1.tgz#1ed6d4cb302576c5ca8d20e7421a826aeaf97fe7" + dependencies: + fela-utils "^5.0.1" + +fela-tools@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-tools/-/fela-tools-5.0.1.tgz#3cb93239c39cb574b6d6b43a718178ff3173dde4" + dependencies: + css-in-js-utils "^1.0.3" + fela-utils "^5.0.1" + +fela-utils@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela-utils/-/fela-utils-5.0.1.tgz#d65dc24bd093442c89d5bdd7d8ffeace82b608ee" + dependencies: + css-in-js-utils "^1.0.3" + +fela@^5.0.0, fela@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/fela/-/fela-5.0.1.tgz#768a78d019021f9b6eb1518773b70668569c187f" + dependencies: + css-in-js-utils "^1.0.3" + fela-tools "^5.0.1" + fela-utils "^5.0.1" + figures@^1.3.5: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -1803,7 +2103,7 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.1.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: @@ -1888,6 +2188,10 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" +function-bind@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -1949,7 +2253,7 @@ glob@7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -2018,6 +2322,12 @@ has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + hash-base@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" @@ -2081,6 +2391,16 @@ html-encoding-sniffer@^1.0.1: dependencies: whatwg-encoding "^1.0.1" +htmlparser2@3.8.x: + version "3.8.3" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" + dependencies: + domelementtype "1" + domhandler "2.3" + domutils "1.5" + entities "1.0" + readable-stream "1.1" + http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" @@ -2093,7 +2413,7 @@ https-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" -hyphenate-style-name@^1.0.0: +hyphenate-style-name@^1.0.0, hyphenate-style-name@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" @@ -2140,6 +2460,13 @@ ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" +inline-style-prefixer@^3.0.0, inline-style-prefixer@^3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-3.0.6.tgz#b27fe309b4168a31eaf38c8e8c60ab9e7c11731f" + dependencies: + bowser "^1.6.0" + css-in-js-utils "^1.0.3" + inquirer@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" @@ -2293,6 +2620,10 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" @@ -2683,10 +3014,27 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +jshint@^2.8.0: + version "2.9.4" + resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.9.4.tgz#5e3ba97848d5290273db514aee47fe24cf592934" + dependencies: + cli "~1.0.0" + console-browserify "1.1.x" + exit "0.1.x" + htmlparser2 "3.8.x" + lodash "3.7.x" + minimatch "~3.0.2" + shelljs "0.3.x" + strip-json-comments "1.0.x" + json-loader@^0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" +json-schema-traverse@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.0.tgz#0016c0b1ca1efe46d44d37541bcdfc19dcfae0db" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -2722,6 +3070,10 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" +jsx-ast-utils@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" + kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2765,6 +3117,15 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + loader-fs-cache@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" @@ -2785,7 +3146,7 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" -loader-utils@^1.0.2: +loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" dependencies: @@ -2808,10 +3169,18 @@ lodash.assign@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" +lodash.cond@^4.3.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" + lodash.pickby@^4.0.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.pickby/-/lodash.pickby-4.6.0.tgz#7dea21d8c18d7703a27c704c15d3b84a67e33aff" +lodash@3.7.x: + version "3.7.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.7.0.tgz#3678bd8ab995057c07ade836ed2ef087da811d45" + lodash@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" @@ -2863,6 +3232,12 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: errno "^0.1.3" readable-stream "^2.0.1" +merge-options@0.0.64: + version "0.0.64" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-0.0.64.tgz#cbe04f594a6985eaf27f7f8f0b2a3acf6f9d562d" + dependencies: + is-plain-obj "^1.1.0" + merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" @@ -2918,7 +3293,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -2938,6 +3313,10 @@ mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: dependencies: minimist "0.0.8" +ms@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -3210,6 +3589,12 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + pbkdf2@^3.0.3: version "3.0.12" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.12.tgz#be36785c5067ea48d806ff923288c5f750b6b8a2" @@ -3252,6 +3637,10 @@ pluralize@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" +polished@^1.0.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/polished/-/polished-1.1.3.tgz#8f0f4b4c82eb7e33b0862487a8d07bd897b5392f" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -3361,6 +3750,10 @@ raf@^3.1.0: dependencies: performance-now "^2.1.0" +ramda@^0.24.1: + version "0.24.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.24.1.tgz#c3b7755197f35b8dc3502228262c4c91ddb6b857" + randomatic@^1.1.3: version "1.1.6" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb" @@ -3397,6 +3790,14 @@ react-dom@^15.5.4: object-assign "^4.1.0" prop-types "~15.5.7" +react-fela@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/react-fela/-/react-fela-5.0.3.tgz#04f3f17b0039c8482adddc7df61c69221f3d9ee1" + dependencies: + fela "^5.0.1" + fela-dom "^5.0.2" + prop-types "^15.5.8" + react-gateway@^2.0.4, react-gateway@^2.2.0: version "2.7.0" resolved "https://registry.yarnpkg.com/react-gateway/-/react-gateway-2.7.0.tgz#64bb3e8f8b7c6bf9f26ff3bf08a9946a5af4836e" @@ -3508,6 +3909,13 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -3516,6 +3924,14 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + readable-stream@1.0.27-1: version "1.0.27-1" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.27-1.tgz#6b67983c20357cefd07f0165001a16d710d91078" @@ -3525,6 +3941,15 @@ readable-stream@1.0.27-1: isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@1.1: + version "1.1.13" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6: version "2.2.9" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" @@ -3570,6 +3995,10 @@ redux-logger@^2.6.1: dependencies: deep-diff "0.3.4" +redux-mock-store@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/redux-mock-store/-/redux-mock-store-1.2.3.tgz#1b3ad299da91cb41ba30d68e3b6f024475fb9e1b" + redux-thunk@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-1.0.3.tgz#778aa0099eea0595031ab6b39165f6670d8d26bd" @@ -3684,6 +4113,10 @@ require-uncached@^1.0.2: caller-path "^0.1.0" resolve-from "^1.0.0" +requireindex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" + resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" @@ -3776,6 +4209,10 @@ sha.js@^2.4.0, sha.js@^2.4.8: dependencies: inherits "^2.0.1" +shelljs@0.3.x: + version "0.3.0" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" + shelljs@^0.7.5: version "0.7.7" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" @@ -3806,9 +4243,9 @@ sntp@1.x.x: dependencies: hoek "2.x.x" -source-list-map@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" +source-list-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" source-map-support@^0.4.2: version "0.4.15" @@ -3937,6 +4374,10 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-json-comments@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -4105,7 +4546,7 @@ uc.micro@^1.0.1, uc.micro@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.3.tgz#7ed50d5e0f9a9fb0a573379259f2a77458d50192" -uglify-js@^2.6, uglify-js@^2.8.27: +uglify-js@^2.6: version "2.8.27" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.27.tgz#47787f912b0f242e5b984343be8e35e95f694c9c" dependencies: @@ -4118,6 +4559,13 @@ uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +uglifyjs-webpack-plugin@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.4.tgz#7829c50ee5a5b755969d4458357ed5a2dd36fbbd" + dependencies: + source-map "^0.5.6" + webpack-sources "^1.0.1" + uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -4200,37 +4648,38 @@ webidl-conversions@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0" -webpack-sources@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" +webpack-sources@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.1.tgz#c7356436a4d13123be2e2426a05d1dad9cbe65cf" dependencies: - source-list-map "^1.1.1" + source-list-map "^2.0.0" source-map "~0.5.3" -webpack@^2.2.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-2.6.0.tgz#7e650a92816abff5db5f43316b0b8b19b13d76c1" +webpack@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.0.0.tgz#ee9bcebf21247f7153cb410168cab45e3a59d4d7" dependencies: acorn "^5.0.0" acorn-dynamic-import "^2.0.0" - ajv "^4.7.0" - ajv-keywords "^1.1.1" + ajv "^5.1.5" + ajv-keywords "^2.0.0" async "^2.1.2" enhanced-resolve "^3.0.0" + escope "^3.6.0" interpret "^1.0.0" json-loader "^0.5.4" json5 "^0.5.1" loader-runner "^2.3.0" - loader-utils "^0.2.16" + loader-utils "^1.1.0" memory-fs "~0.4.1" mkdirp "~0.5.0" node-libs-browser "^2.0.0" source-map "^0.5.3" supports-color "^3.1.0" tapable "~0.2.5" - uglify-js "^2.8.27" + uglifyjs-webpack-plugin "^0.4.4" watchpack "^1.3.1" - webpack-sources "^0.2.3" + webpack-sources "^1.0.1" yargs "^6.0.0" whatwg-encoding@^1.0.1: From 07693c2e86301d92dce50abc5bdf0cb6610a7ebe Mon Sep 17 00:00:00 2001 From: Sachin Date: Tue, 20 Jun 2017 09:59:58 -0700 Subject: [PATCH 03/10] Fixed eslint errors --- .eslintrc | 9 --------- src/actions/config.js | 7 +++++-- src/components/AnalyticCard/AnalyticCard.js | 4 +++- .../AppNavigationLiNode/AppNavigationLiNode.js | 3 ++- src/components/CustomCardControl/CustomCardControl.js | 7 ++++++- src/components/FeatureManager/FeatureManager.js | 3 ++- src/components/FormattedMarkdown/FormattedMarkdown.js | 6 ++++-- src/containers/AppNavigation/AppNavigation.js | 3 ++- .../BrowserCacheTTLCard/BrowserCacheTTLCard.js | 8 ++++---- .../ChallengePassageCard/ChallengePassageCard.js | 4 ++-- .../MarketingFeatureCollection.js | 2 +- src/containers/WaitForSettings/WaitForSettings.js | 11 +++++++++-- .../ZoneProvisionContainer/ZoneProvisionContainer.js | 1 + src/index.js | 2 +- src/utils/ImportCards.js | 2 +- 15 files changed, 43 insertions(+), 29 deletions(-) delete mode 100644 .eslintrc diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index fd1d142..0000000 --- a/.eslintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parser": "babel-eslint", - "plugins": [ - "prettier" - ], - "rules": { - "prettier/prettier": ["error", {"trailingComma": "none", "singleQuote": true}] - } -} diff --git a/src/actions/config.js b/src/actions/config.js index fcb624f..0a57a15 100644 --- a/src/actions/config.js +++ b/src/actions/config.js @@ -27,20 +27,23 @@ export function configFetchError() { export function asyncConfigInit() { return dispatch => { +<<<<<<< HEAD /* * 1. Fetch config.js * 2. Fetch userConfig.js (which may not exist) * 3. Fetch translations with the language from the config. */ dispatch(asyncConfigFetch()); - if (typeof absoluteUrlBase !== 'undefined') { + if (typeof window.absoluteUrlBase !== 'undefined') { /* * Some integrations don't work with relative paths because the URL doesn't match * the actual file path, this function allows integrations to configure a base absolute * url path to be used in components/Image. absoluteBaseUrl should be defined globally * on the page where the SPA is loaded. */ - dispatch(configUpdateByKey(ABSOLUTE_URL_BASE_KEY, absoluteUrlBase)); + dispatch( + configUpdateByKey(ABSOLUTE_URL_BASE_KEY, window.absoluteUrlBase) + ); } //log user in if their email is in local storage if (isLoggedIn()) { diff --git a/src/components/AnalyticCard/AnalyticCard.js b/src/components/AnalyticCard/AnalyticCard.js index ebe27e6..3fb78b4 100644 --- a/src/components/AnalyticCard/AnalyticCard.js +++ b/src/components/AnalyticCard/AnalyticCard.js @@ -131,7 +131,9 @@ AnalyticCard.propTypes = { description: PropTypes.string.isRequired, data: PropTypes.object.isRequired, dataType: PropTypes.string.isRequired, - helpTextId: PropTypes.string.isRequired + helpTextId: PropTypes.string.isRequired, + intl: PropTypes.object.isRequired, + formatMessage: PropTypes.func.isRequired }; function mapStateToProps() { diff --git a/src/components/AppNavigationLiNode/AppNavigationLiNode.js b/src/components/AppNavigationLiNode/AppNavigationLiNode.js index f715a2d..1672619 100644 --- a/src/components/AppNavigationLiNode/AppNavigationLiNode.js +++ b/src/components/AppNavigationLiNode/AppNavigationLiNode.js @@ -31,5 +31,6 @@ export default class AppNavigationLiNode extends Component { AppNavigationLiNode.propTypes = { onClick: PropTypes.func.isRequired, - title: PropTypes.string.isRequired + title: PropTypes.string.isRequired, + children: PropTypes.node }; diff --git a/src/components/CustomCardControl/CustomCardControl.js b/src/components/CustomCardControl/CustomCardControl.js index ff135ca..5e7c99b 100644 --- a/src/components/CustomCardControl/CustomCardControl.js +++ b/src/components/CustomCardControl/CustomCardControl.js @@ -58,7 +58,12 @@ class CustomCardControl extends Component { CustomCardControl.propTypes = { name: PropTypes.string, - indentifier: PropTypes.string.isRequired + indentifier: PropTypes.string.isRequired, + integrationName: PropTypes.string, + activeZone: PropTypes.string, + currentPlan: PropTypes.string, + minimumPlan: PropTypes.string, + children: PropTypes.node }; function mapStateToProps(state) { diff --git a/src/components/FeatureManager/FeatureManager.js b/src/components/FeatureManager/FeatureManager.js index b66b966..101c3bd 100644 --- a/src/components/FeatureManager/FeatureManager.js +++ b/src/components/FeatureManager/FeatureManager.js @@ -14,5 +14,6 @@ export default class FeatureManager extends Component { FeatureManager.propTypes = { isEnabled: PropTypes.bool.isRequired, - error: PropTypes.string + error: PropTypes.string, + children: PropTypes.node }; diff --git a/src/components/FormattedMarkdown/FormattedMarkdown.js b/src/components/FormattedMarkdown/FormattedMarkdown.js index 8c41a63..4f92761 100644 --- a/src/components/FormattedMarkdown/FormattedMarkdown.js +++ b/src/components/FormattedMarkdown/FormattedMarkdown.js @@ -17,7 +17,6 @@ import { getConfigValue } from '../../selectors/config.js'; // class FormattedMarkdown extends Component { render() { - const { formatMessage } = this.props.intl; let { integrationName } = this.props; var formattedMessage = formatMessageForIntegration( @@ -39,7 +38,10 @@ class FormattedMarkdown extends Component { } FormattedMarkdown.propTypes = { - text: PropTypes.string.isRequired + text: PropTypes.string.isRequired, + formattedMessage: PropTypes.func, + intl: PropTypes.object, + integrationName: PropTypes.string }; function mapStateToProps(state) { diff --git a/src/containers/AppNavigation/AppNavigation.js b/src/containers/AppNavigation/AppNavigation.js index 0952a26..db6fa99 100644 --- a/src/containers/AppNavigation/AppNavigation.js +++ b/src/containers/AppNavigation/AppNavigation.js @@ -97,7 +97,8 @@ class AppNavigation extends Component { } AppNavigation.propTypes = { - dispatch: PropTypes.func.isRequired + dispatch: PropTypes.func.isRequired, + config: PropTypes.object.isRequired }; function mapStateToProps(state) { diff --git a/src/containers/BrowserCacheTTLCard/BrowserCacheTTLCard.js b/src/containers/BrowserCacheTTLCard/BrowserCacheTTLCard.js index 5e80c42..b07e13c 100644 --- a/src/containers/BrowserCacheTTLCard/BrowserCacheTTLCard.js +++ b/src/containers/BrowserCacheTTLCard/BrowserCacheTTLCard.js @@ -86,7 +86,7 @@ class BrowserCacheTTLCard extends Component { }) }, { - value: parseInt('18000'), // This is a hack to avoid webpack converting to scientific notation + value: parseInt('18000', 10), // This is a hack to avoid webpack converting to scientific notation label: formatMessage({ id: 'container.browserCacheTTLCard.fiveHours' }) @@ -110,7 +110,7 @@ class BrowserCacheTTLCard extends Component { }) }, { - value: parseInt('72000'), // This is a hack to avoid webpack converting to scientific notation + value: parseInt('72000', 10), // This is a hack to avoid webpack converting to scientific notation label: formatMessage({ id: 'container.browserCacheTTLCard.twentyHours' }) @@ -140,7 +140,7 @@ class BrowserCacheTTLCard extends Component { }) }, { - value: parseInt('432000'), // This is a hack to avoid webpack converting to scientific notation + value: parseInt('432000', 10), // This is a hack to avoid webpack converting to scientific notation label: formatMessage({ id: 'container.browserCacheTTLCard.fiveDays' }) @@ -182,7 +182,7 @@ class BrowserCacheTTLCard extends Component { }) }, { - value: parseInt('31536000'), // This is a hack to avoid webpack converting to scientific notation + value: parseInt('31536000', 10), // This is a hack to avoid webpack converting to scientific notation label: formatMessage({ id: 'container.browserCacheTTLCard.oneYear' }) diff --git a/src/containers/ChallengePassageCard/ChallengePassageCard.js b/src/containers/ChallengePassageCard/ChallengePassageCard.js index df7fbc2..c3aa917 100644 --- a/src/containers/ChallengePassageCard/ChallengePassageCard.js +++ b/src/containers/ChallengePassageCard/ChallengePassageCard.js @@ -138,13 +138,13 @@ class ChallengePassageCard extends Component { }) }, { - value: parseInt('2592000'), // This is a hack to avoid webpack converting to scientific notation + value: parseInt('2592000', 10), // This is a hack to avoid webpack converting to scientific notation label: formatMessage({ id: 'container.challengePassageCard.select.oneMonth' }) }, { - value: parseInt('31536000'), // This is a hack to avoid webpack converting to scientific notation + value: parseInt('31536000', 10), // This is a hack to avoid webpack converting to scientific notation label: formatMessage({ id: 'container.challengePassageCard.select.oneYear' }) diff --git a/src/containers/MarketingFeatureCollection/MarketingFeatureCollection.js b/src/containers/MarketingFeatureCollection/MarketingFeatureCollection.js index 84c6048..2ce91bf 100644 --- a/src/containers/MarketingFeatureCollection/MarketingFeatureCollection.js +++ b/src/containers/MarketingFeatureCollection/MarketingFeatureCollection.js @@ -3,7 +3,7 @@ import { connect } from 'react-redux'; import { LayoutRow, LayoutColumn } from 'cf-component-layout'; import { Flex } from 'cf-component-flex'; -import { FormattedMessage, injectIntl } from 'react-intl'; +import { injectIntl } from 'react-intl'; import MarketingFeature from '../../components/MarketingFeature/MarketingFeature'; diff --git a/src/containers/WaitForSettings/WaitForSettings.js b/src/containers/WaitForSettings/WaitForSettings.js index 96ec278..13851e5 100644 --- a/src/containers/WaitForSettings/WaitForSettings.js +++ b/src/containers/WaitForSettings/WaitForSettings.js @@ -33,7 +33,6 @@ class WaitForSettings extends Component { analytics, config } = this.props; - const { formatMessage } = this.props.intl; let isSettingsLoaded = true; let isPluginSettingsLoaded = true; @@ -98,7 +97,15 @@ class WaitForSettings extends Component { WaitForSettings.propTypes = { settings: PropTypes.bool, pluginSettings: PropTypes.bool, - analytics: PropTypes.bool + analytics: PropTypes.bool, + dispatch: PropTypes.func, + activeZone: PropTypes.object, + zoneSettings: PropTypes.object, + zonePluginSettings: PropTypes.object, + zoneAnalytics: PropTypes.object, + config: PropTypes.object, + intl: PropTypes.object, + children: PropTypes.node }; function mapStateToProps(state) { diff --git a/src/containers/ZoneProvisionContainer/ZoneProvisionContainer.js b/src/containers/ZoneProvisionContainer/ZoneProvisionContainer.js index b38f747..269837b 100644 --- a/src/containers/ZoneProvisionContainer/ZoneProvisionContainer.js +++ b/src/containers/ZoneProvisionContainer/ZoneProvisionContainer.js @@ -91,6 +91,7 @@ class ZoneProvisionContainer extends Component { diff --git a/src/index.js b/src/index.js index 4b74309..8525fcd 100644 --- a/src/index.js +++ b/src/index.js @@ -15,7 +15,7 @@ const history = syncHistoryWithStore(createHistory(), store); * Register our RestProxyCallback to send all cf-util-http calls to * our backend instead of their actual endpoint. */ -http.beforeSend(RestProxyCallback); +http.beforeSend(window.RestProxyCallback); ReactDOM.render( diff --git a/src/utils/ImportCards.js b/src/utils/ImportCards.js index b359c5d..b7fc58a 100644 --- a/src/utils/ImportCards.js +++ b/src/utils/ImportCards.js @@ -36,7 +36,7 @@ import BypassCacheByCookieCard import DNSManagementPage from '../containers/DNSManagementPage/DNSManagementPage'; -let cardMapper = { +const cardMapper = { AdvanceDDoSCard: AdvanceDDoSCard, AlwaysOnlineCard: AlwaysOnlineCard, ApplyDefaultSettingsCard: ApplyDefaultSettingsCard, From 9c0d82972682ae604b9a4b92b4095a6050d619a5 Mon Sep 17 00:00:00 2001 From: Sachin Date: Tue, 20 Jun 2017 10:39:53 -0700 Subject: [PATCH 04/10] Changed route names to better names --- src/routes.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/routes.js b/src/routes.js index c642c6b..5867f39 100644 --- a/src/routes.js +++ b/src/routes.js @@ -8,8 +8,8 @@ import AnalyticsPage from './containers/AnalyticsPage/AnaltyicsPage'; import App from './containers/App/App'; import DNSManagementPage from './containers/DNSManagementPage/DNSManagementPage'; -import Login from './containers/LoginPage/LoginPage'; -import Splash from './containers/SplashPage/SplashPage'; +import LoginPage from './containers/LoginPage/LoginPage'; +import SplashPage from './containers/SplashPage/SplashPage'; import SignUpPage from './containers/SignUpPage/SignUpPage'; import HomePage from './containers/HomePage/HomePage'; import MoreSettingsPage from './containers/MoreSettingsPage/MoreSettingsPage'; @@ -25,8 +25,8 @@ function requireAuth(nextState, replaceState) { export default ( - - + + Date: Tue, 20 Jun 2017 11:25:20 -0700 Subject: [PATCH 05/10] Changed the channel values and added more tests for channel function --- src/selectors/generateChannelLink.js | 16 +++------------- src/test/selectors/generateChannelLinkTest.js | 19 +++++++++++++++++-- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/selectors/generateChannelLink.js b/src/selectors/generateChannelLink.js index 17dc51b..dcad497 100644 --- a/src/selectors/generateChannelLink.js +++ b/src/selectors/generateChannelLink.js @@ -6,20 +6,10 @@ */ export function generateChannelLink(pageURL, integrationName) { - let channelName; - switch (integrationName) { - case 'Magento': - channelName = 'Integration: Magento 2'; - break; - case 'cpanel': - channelName = 'Integration: CPanel'; - break; - case 'wordpress': - channelName = 'Integration: WordPress'; - break; - default: - channelName = ''; + if (!integrationName) { + return encodeURI(`${pageURL}`); } + let channelName = `Integration:${integrationName}`; if (pageURL.indexOf('?') > -1) { return encodeURI(`${pageURL}&channel=${channelName}`); } diff --git a/src/test/selectors/generateChannelLinkTest.js b/src/test/selectors/generateChannelLinkTest.js index 1d87e3e..5406b6d 100644 --- a/src/test/selectors/generateChannelLinkTest.js +++ b/src/test/selectors/generateChannelLinkTest.js @@ -5,12 +5,27 @@ describe('generateChannelLink', function() { expect( generateChannelLink('htttp://www.example.com?Param1=param', 'wordpress') ).toBe( - 'htttp://www.example.com?Param1=param&channel=Integration:%20WordPress' + 'htttp://www.example.com?Param1=param&channel=Integration:wordpress' ); }); it('should return new cpanel uri', function() { expect(generateChannelLink('htttp://www.example.com', 'cpanel')).toBe( - 'htttp://www.example.com?channel=Integration:%20CPanel' + 'htttp://www.example.com?channel=Integration:cpanel' + ); + }); + it('should return new magento uri', function() { + expect(generateChannelLink('htttp://www.example.com', 'magento')).toBe( + 'htttp://www.example.com?channel=Integration:magento' + ); + }); + it('should return any arbitary channel', function() { + expect( + generateChannelLink('htttp://www.example.com', 'someNewChannel') + ).toBe('htttp://www.example.com?channel=Integration:someNewChannel'); + }); + it('should return same url when no integrationName', function() { + expect(generateChannelLink('htttp://www.example.com')).toBe( + 'htttp://www.example.com' ); }); }); From 2435ab7ac2245855a6cca3263db9f96ba8179c8d Mon Sep 17 00:00:00 2001 From: Sachin Date: Thu, 22 Jun 2017 14:38:01 -0700 Subject: [PATCH 06/10] Added integration specific heading --- lang/en.js | 2 +- src/containers/SplashPage/SplashPage.js | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/lang/en.js b/lang/en.js index ab18fc6..18229d0 100644 --- a/lang/en.js +++ b/lang/en.js @@ -243,7 +243,7 @@ "container.sslCard.select.flexible": "Flexible", "container.sslCard.select.full": "Full", "container.sslCard.select.full_strict": "Full Strict", - "container.splashPage.heading.speedUp": "Speed up and Optimize your WordPress Site with Cloudflare", + "container.splashPage.heading.speedUp": "Speed up and Optimize your {integrationName} Site with Cloudflare", "container.splashPage.help.alreadyHaveAccount": "Have an account already? Sign in", "container.splashPage.help.here": "here", "container.splashPage.button.createFreeAccount": "Create Your Free Account", diff --git a/src/containers/SplashPage/SplashPage.js b/src/containers/SplashPage/SplashPage.js index dfe856a..8bec254 100644 --- a/src/containers/SplashPage/SplashPage.js +++ b/src/containers/SplashPage/SplashPage.js @@ -59,16 +59,20 @@ class SplashPage extends Component { render() { const { config } = this.props; + const integrationName = getConfigValue(config, 'integrationName'); + const integrationNameCapital = + integrationName.charAt(0).toUpperCase() + integrationName.slice(1); + let signupLinkWithUTM = generateUTMLink( CLOUDFLARE_SIGNUP_PAGE, - getConfigValue(config, 'integrationName'), - getConfigValue(config, 'integrationName'), + integrationName, + integrationName, SIGNUP_SPLASH_UTM_CONTENT_IDENTIFIER ); let signupLinkWithUTMAndChannel = generateChannelLink( signupLinkWithUTM, - getConfigValue(config, 'integrationName') + integrationName ); return ( @@ -80,7 +84,12 @@ class SplashPage extends Component { - + From 60d061b9f53a6a989ad6506faa856de9d80e4e60 Mon Sep 17 00:00:00 2001 From: Sachin Date: Thu, 22 Jun 2017 14:59:46 -0700 Subject: [PATCH 07/10] Updated tests for channel generator --- src/test/selectors/generateChannelLinkTest.js | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/test/selectors/generateChannelLinkTest.js b/src/test/selectors/generateChannelLinkTest.js index 5406b6d..bf71f99 100644 --- a/src/test/selectors/generateChannelLinkTest.js +++ b/src/test/selectors/generateChannelLinkTest.js @@ -7,25 +7,23 @@ describe('generateChannelLink', function() { ).toBe( 'htttp://www.example.com?Param1=param&channel=Integration:wordpress' ); - }); - it('should return new cpanel uri', function() { - expect(generateChannelLink('htttp://www.example.com', 'cpanel')).toBe( - 'htttp://www.example.com?channel=Integration:cpanel' - ); - }); - it('should return new magento uri', function() { - expect(generateChannelLink('htttp://www.example.com', 'magento')).toBe( - 'htttp://www.example.com?channel=Integration:magento' - ); - }); - it('should return any arbitary channel', function() { - expect( - generateChannelLink('htttp://www.example.com', 'someNewChannel') - ).toBe('htttp://www.example.com?channel=Integration:someNewChannel'); - }); - it('should return same url when no integrationName', function() { - expect(generateChannelLink('htttp://www.example.com')).toBe( - 'htttp://www.example.com' - ); + + it('should return any arbitary channel', function() { + expect( + generateChannelLink('htttp://www.example.com', 'someNewChannel') + ).toBe('htttp://www.example.com?channel=Integration:someNewChannel'); + }); + + it('should return same url when no integrationName', function() { + expect(generateChannelLink('htttp://www.example.com', '')).toBe( + 'htttp://www.example.com' + ); + }); + + it('should return same url when no integrationName', function() { + expect(generateChannelLink('htttp://www.example.com')).toBe( + 'htttp://www.example.com' + ); + }); }); }); From 21b41b373442bc11881c700a28ca5f53d17c83e0 Mon Sep 17 00:00:00 2001 From: Sachin Date: Tue, 27 Jun 2017 13:55:55 -0700 Subject: [PATCH 08/10] Fix conflict --- src/actions/config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/actions/config.js b/src/actions/config.js index 0a57a15..ac70186 100644 --- a/src/actions/config.js +++ b/src/actions/config.js @@ -27,7 +27,6 @@ export function configFetchError() { export function asyncConfigInit() { return dispatch => { -<<<<<<< HEAD /* * 1. Fetch config.js * 2. Fetch userConfig.js (which may not exist) From 2e16701e5d6d3a156c933c70f210f3e6d77363c8 Mon Sep 17 00:00:00 2001 From: Sachin Date: Tue, 27 Jun 2017 14:01:46 -0700 Subject: [PATCH 09/10] Changed to svgs --- assets/global-caching.png | Bin 6982 -> 0 bytes assets/global-caching.svg | 1 + assets/insight.png | Bin 5331 -> 0 bytes assets/insight.svg | 1 + assets/security.png | Bin 4339 -> 0 bytes assets/security.svg | 1 + assets/web-optimization.png | Bin 2196 -> 0 bytes assets/web-optimization.svg | 1 + .../BenefitsCollection/BenefitsCollection.js | 8 ++++---- 9 files changed, 8 insertions(+), 4 deletions(-) delete mode 100644 assets/global-caching.png create mode 100644 assets/global-caching.svg delete mode 100644 assets/insight.png create mode 100644 assets/insight.svg delete mode 100644 assets/security.png create mode 100644 assets/security.svg delete mode 100644 assets/web-optimization.png create mode 100644 assets/web-optimization.svg diff --git a/assets/global-caching.png b/assets/global-caching.png deleted file mode 100644 index 4b0af3c55bb49da972b10ada6340676c361f5bf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6982 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 Js8O~E|39q`nTY@Z diff --git a/assets/global-caching.svg b/assets/global-caching.svg new file mode 100644 index 0000000..432cec9 --- /dev/null +++ b/assets/global-caching.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/insight.png b/assets/insight.png deleted file mode 100644 index cfb0d5d737dc3829df98009c32f706ab917d913e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5331 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 Uw5ejs_E!-^Rad3*x$W!!0njr!00000 diff --git a/assets/insight.svg b/assets/insight.svg new file mode 100644 index 0000000..a9ac652 --- /dev/null +++ b/assets/insight.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/security.png b/assets/security.png deleted file mode 100644 index a9095951be5f9d7d5d7fbbe6f762348b4fd50848..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4339 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 diff --git a/assets/security.svg b/assets/security.svg new file mode 100644 index 0000000..ade1966 --- /dev/null +++ b/assets/security.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/web-optimization.png b/assets/web-optimization.png deleted file mode 100644 index 9b4bce4ad98067e83a69d097de413f03e654a016..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2196 zcmbVNi&v7_7RS0pHPP0&zw|5Ecym9vzjE+H1h$z zTHefQFmrNJ6twFKQZh2_mKpeA2&pO3kQYn????Z^z292r`<=DU+55N8-oJegJu*Dd zXzTY|VKA6ca1i!5giHFdWi#~mUh>=n!LEG&xcn2u^n3~-FAe6KN=#0(4$dZIq#aKq zqyi*CnimYV<)>h*Z`ApBi&GKhV(j)J(u7ONWpn9L!JrKiBg z=Lg-_`KtP%z&H=uvN=sVkB%i4d{RU!hgQdPkNPf+p7OA&L`Q6Dt7$`WIMjl%wTlBT zZz8J;WOOfz7Pat!VC+O18{nD&^irKn*eXXkcfMFeM21US2tX|Jq$}xSaaW?V6S3kX zgB_O$-gOl6HpL?Lag$paY#+fSksktWd4A(08w8$kS;}e-7jup zVry#IKD~lGH(;vBpqJL&t2*yTTG2mF-nece*}^+-3em>i1=7G5bcd(iEYPaab`- zy5YWUK@j`SqadBj^LJ1+Jal(atCTipPiIV=k0>l-yQg%5Z;gIivsj$JKQ-eE95Nj7OgZ6~ z)?T+RJn0<^7PhK$07ePhn&=NWs7!0Qjl)!3pY2E}PE}KdnRq)eg5_BRgPBPHjp0V3 zgWoCu*VM6X{5}MT9;WHT^^i>U^}Fd44mim0o+fuz!ym;#b$$9BLlBCqpa_FfA_2N6GA=khbH-g#u?zC|Kltg+^X>Ndk)7+X^Gn_6rc7;;oFub ztS?`Mmu}8IHSqPZ>aG^OeNxBF2IR%$?#Fj5c=+c-oS{Z(#_GYYj2md?vqdwYbm`x> zRplm*v#14GpVG`N>xII~K^kzghkx$+O9w}xFCQ;H)H`bMa@DHA7EP-E`#)Q*JU^yR z%mVPnHef>0s)AEaS9Unu~xmcmbUes!(hf#X+@*QHSVK~DYqjQ zcjDZpuOsE(rS{Y)yTwh@Dz%y8Y>nEcs^?0f;XY#Gp`4r~s_by*(w#x3AXv}YGW?8i&(-HLi-S=w8kdgRD_^D* zvyu5x_DV-WPjYlFDZY}jhxnS>BJjM;_UkB=qf&B7)crB9o6aIXmiDV0V;CfXD6(!c zWar{5Um1!>Plp6R`Lq0Z`^P0LR{Ta@b}F-JI27k_$wL)>N#I$D>1KNuN!qv_lT4C1 z%R^zP+FC6Tsgsnd1s}R+Tww_K@Jq*;?m_gjzXJn{euL|S-+TKsxa-)1;5rr5+F|`)Y3O^sfG%wI>(#|=>KG? z{q+(Px(JQkOQM;`>vj!utJ^UjvnGxXa|fGC%f3IbmV8E~Mm;Fd962s1JN$K3Eu6Zs zhR$+3tec%A$8v@=5rq-xef0@omskH|s#we!nvW|Te;;#qSD>8*2=eO@l;(jt;W3ls@`=l)s%H6Ynbr&EkI0$Orz!|nv)s4`RX zY+clhr&{8;+SO6GghE_z?SHa79Ctyr&RPazHNPM<{J+Ry;{0N-+1+!?emAVFKFz;Y z){lqU&RwQ8Xa?rz9tMJ%%QI_X@A7eVG#V+(XI;t5?KFblNc31Kgo`S}-3hl4n!#{! zykDBNJ8x5oVG$cvVz>-0!ybg00000 diff --git a/assets/web-optimization.svg b/assets/web-optimization.svg new file mode 100644 index 0000000..a219c3f --- /dev/null +++ b/assets/web-optimization.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/containers/BenefitsCollection/BenefitsCollection.js b/src/containers/BenefitsCollection/BenefitsCollection.js index a9f9178..6278d43 100644 --- a/src/containers/BenefitsCollection/BenefitsCollection.js +++ b/src/containers/BenefitsCollection/BenefitsCollection.js @@ -19,7 +19,7 @@ class BenefitsCollection extends Component {   Date: Tue, 27 Jun 2017 14:04:47 -0700 Subject: [PATCH 10/10] Updated tests --- src/test/containers/__snapshots__/SplashPageTest.js.snap | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/containers/__snapshots__/SplashPageTest.js.snap b/src/test/containers/__snapshots__/SplashPageTest.js.snap index d55e032..9dac15d 100644 --- a/src/test/containers/__snapshots__/SplashPageTest.js.snap +++ b/src/test/containers/__snapshots__/SplashPageTest.js.snap @@ -141,7 +141,7 @@ exports[`renders enabled correctly 1`] = ` } >