diff options
author | Brandon Millman <brandon.millman@gmail.com> | 2018-11-20 01:32:39 +0800 |
---|---|---|
committer | Brandon Millman <brandon.millman@gmail.com> | 2018-11-20 01:32:39 +0800 |
commit | 3d6711bd38c3cb801d00a73a6386c4bb16359811 (patch) | |
tree | 411ffc816f673c69d50fcf0a9f0ae3c4defa4ea9 /packages/website/ts | |
parent | 004e197863e4df942d21f9e4ed629c08eeadad56 (diff) | |
parent | 99541f89f7676f6b0d8a923ad377fa901a74f504 (diff) | |
download | dexon-sol-tools-3d6711bd38c3cb801d00a73a6386c4bb16359811.tar dexon-sol-tools-3d6711bd38c3cb801d00a73a6386c4bb16359811.tar.gz dexon-sol-tools-3d6711bd38c3cb801d00a73a6386c4bb16359811.tar.bz2 dexon-sol-tools-3d6711bd38c3cb801d00a73a6386c4bb16359811.tar.lz dexon-sol-tools-3d6711bd38c3cb801d00a73a6386c4bb16359811.tar.xz dexon-sol-tools-3d6711bd38c3cb801d00a73a6386c4bb16359811.tar.zst dexon-sol-tools-3d6711bd38c3cb801d00a73a6386c4bb16359811.zip |
Merge branch 'development' into feature/instant/icons
* development: (37 commits)
Add 0x-order-utils.py library to developers home
Fixes to CONTRIBUTING.md
Improve our CONTRIBUTING.md instructions
fix(order_utils.py): publish docs to S3, not RTD (#1264)
fix: make instant package private
feat: refer to map file in postpublish configs
feat: add new bundle name to bundle watch
fix: tslint ignore rule in wrong place
Update blog post feature
Fix disclaimer on mobile
Add smart contract docs to Developer Home
Add Apache license link
Fix capitalization in title
Remove excess semi-colon
Point directly to README for docs link
Update icons
Update LICENSE
Fix disclaimer
Add blogpost URL
Add disclaimer
...
Diffstat (limited to 'packages/website/ts')
-rw-r--r-- | packages/website/ts/components/footer.tsx | 6 | ||||
-rw-r--r-- | packages/website/ts/components/ui/container.tsx | 2 | ||||
-rw-r--r-- | packages/website/ts/containers/launch_kit.ts | 27 | ||||
-rw-r--r-- | packages/website/ts/index.tsx | 2 | ||||
-rw-r--r-- | packages/website/ts/pages/documentation/docs_home.tsx | 26 | ||||
-rw-r--r-- | packages/website/ts/pages/landing/landing.tsx | 4 | ||||
-rw-r--r-- | packages/website/ts/pages/launch_kit/launch_kit.tsx | 335 | ||||
-rw-r--r-- | packages/website/ts/types.ts | 14 | ||||
-rw-r--r-- | packages/website/ts/utils/constants.ts | 3 |
9 files changed, 416 insertions, 3 deletions
diff --git a/packages/website/ts/components/footer.tsx b/packages/website/ts/components/footer.tsx index dfedcba55..e10005a0a 100644 --- a/packages/website/ts/components/footer.tsx +++ b/packages/website/ts/components/footer.tsx @@ -23,6 +23,7 @@ const languageToMenuTitle = { export interface FooterProps { translate: Translate; dispatcher: Dispatcher; + backgroundColor?: string; } interface FooterState { @@ -30,6 +31,9 @@ interface FooterState { } export class Footer extends React.Component<FooterProps, FooterState> { + public static defaultProps = { + backgroundColor: colors.darkerGrey, + }; constructor(props: FooterProps) { super(props); this.state = { @@ -112,7 +116,7 @@ export class Footer extends React.Component<FooterProps, FooterState> { return <MenuItem key={menuTitle} value={language} primaryText={menuTitle} />; }); return ( - <div className="relative pb4 pt2" style={{ backgroundColor: colors.darkerGrey }}> + <div className="relative pb4 pt2" style={{ backgroundColor: this.props.backgroundColor }}> <div className="mx-auto max-width-4 md-px2 lg-px0 py4 clearfix" style={{ color: colors.white }}> <div className="col lg-col-4 md-col-4 col-12 left"> <div className="sm-mx-auto" style={{ width: 148 }}> diff --git a/packages/website/ts/components/ui/container.tsx b/packages/website/ts/components/ui/container.tsx index ece077563..7eab2a50f 100644 --- a/packages/website/ts/components/ui/container.tsx +++ b/packages/website/ts/components/ui/container.tsx @@ -1,3 +1,4 @@ +import { TextAlignProperty } from 'csstype'; import * as React from 'react'; type StringOrNum = string | number; @@ -26,6 +27,7 @@ export interface ContainerProps { height?: StringOrNum; minWidth?: StringOrNum; minHeight?: StringOrNum; + textAlign?: TextAlignProperty; isHidden?: boolean; className?: string; position?: 'absolute' | 'fixed' | 'relative' | 'unset'; diff --git a/packages/website/ts/containers/launch_kit.ts b/packages/website/ts/containers/launch_kit.ts new file mode 100644 index 000000000..2557f38a5 --- /dev/null +++ b/packages/website/ts/containers/launch_kit.ts @@ -0,0 +1,27 @@ +import * as React from 'react'; +import { connect } from 'react-redux'; +import { Dispatch } from 'redux'; +import { LaunchKit as LaunchKitComponent, LaunchKitProps } from 'ts/pages/launch_kit/launch_kit'; +import { Dispatcher } from 'ts/redux/dispatcher'; +import { State } from 'ts/redux/reducer'; +import { Translate } from 'ts/utils/translate'; + +interface ConnectedState { + translate: Translate; +} + +interface ConnectedDispatch { + dispatcher: Dispatcher; +} + +const mapStateToProps = (state: State, _ownProps: LaunchKitProps): ConnectedState => ({ + translate: state.translate, +}); + +const mapDispatchToProps = (dispatch: Dispatch<State>): ConnectedDispatch => ({ + dispatcher: new Dispatcher(dispatch), +}); + +export const LaunchKit: React.ComponentClass<LaunchKitProps> = connect(mapStateToProps, mapDispatchToProps)( + LaunchKitComponent, +); diff --git a/packages/website/ts/index.tsx b/packages/website/ts/index.tsx index 21157e427..96e7184f8 100644 --- a/packages/website/ts/index.tsx +++ b/packages/website/ts/index.tsx @@ -9,6 +9,7 @@ import { DocsHome } from 'ts/containers/docs_home'; import { FAQ } from 'ts/containers/faq'; import { Jobs } from 'ts/containers/jobs'; import { Landing } from 'ts/containers/landing'; +import { LaunchKit } from 'ts/containers/launch_kit'; import { NotFound } from 'ts/containers/not_found'; import { Wiki } from 'ts/containers/wiki'; import { createLazyComponent } from 'ts/lazy_component'; @@ -87,6 +88,7 @@ render( <Switch> <Route exact={true} path="/" component={Landing as any} /> <Redirect from="/otc" to={`${WebsitePaths.Portal}`} /> + <Route path={WebsitePaths.LaunchKit} component={LaunchKit as any} /> <Route path={WebsitePaths.Careers} component={Jobs as any} /> <Route path={WebsitePaths.Portal} component={LazyPortal} /> <Route path={WebsitePaths.FAQ} component={FAQ as any} /> diff --git a/packages/website/ts/pages/documentation/docs_home.tsx b/packages/website/ts/pages/documentation/docs_home.tsx index 017573304..e3328f3fa 100644 --- a/packages/website/ts/pages/documentation/docs_home.tsx +++ b/packages/website/ts/pages/documentation/docs_home.tsx @@ -67,6 +67,32 @@ const CATEGORY_TO_PACKAGES: ObjectMap<Package[]> = { }, { description: + 'Launch a 0x relayer in under a minute with Launch Kit. `0x-launch-kit` is an open-source, free-to-use 0x relayer template that you can use as a starting point for your own project.', + link: { + title: '0x launch kit', + to: 'https://github.com/0xProject/0x-launch-kit', + shouldOpenInNewTab: true, + }, + }, + { + description: + 'Reference documentation for the 0x smart contracts. Helpful for dApp developer wanting to integrate 0x at the smart contract level.', + link: { + title: '0x smart contracts', + to: WebsitePaths.SmartContracts, + }, + }, + { + description: + "A Python library for interacting with 0x orders. Generate an orderHash, sign an order, validate it's signature and more.", + link: { + title: '0x-order-utils.py', + to: 'http://0x-order-utils-py.s3-website-us-east-1.amazonaws.com/', + shouldOpenInNewTab: true, + }, + }, + { + description: 'An http & websocket client for interacting with relayers that have implemented the [Standard Relayer API](https://github.com/0xProject/standard-relayer-api)', link: { title: '@0x/connect', diff --git a/packages/website/ts/pages/landing/landing.tsx b/packages/website/ts/pages/landing/landing.tsx index e2af40c8d..bb76efe21 100644 --- a/packages/website/ts/pages/landing/landing.tsx +++ b/packages/website/ts/pages/landing/landing.tsx @@ -36,8 +36,8 @@ interface Project { } const THROTTLE_TIMEOUT = 100; -const WHATS_NEW_TITLE = '0x Protocol v2 is Live!'; -const WHATS_NEW_URL = 'https://blog.0xproject.com/0x-protocol-v2-0-is-live-183aac180149'; +const WHATS_NEW_TITLE = 'Introducing the 0x Launch Kit'; +const WHATS_NEW_URL = 'https://blog.0xproject.com/introducing-the-0x-launch-kit-4acdc3453585'; const TITLE_STYLE: React.CSSProperties = { fontFamily: 'Roboto Mono', color: colors.grey, diff --git a/packages/website/ts/pages/launch_kit/launch_kit.tsx b/packages/website/ts/pages/launch_kit/launch_kit.tsx new file mode 100644 index 000000000..4ea56dbd4 --- /dev/null +++ b/packages/website/ts/pages/launch_kit/launch_kit.tsx @@ -0,0 +1,335 @@ +import { colors, Link } from '@0x/react-shared'; +import * as _ from 'lodash'; +import * as React from 'react'; +import DocumentTitle from 'react-document-title'; +import { Footer } from 'ts/components/footer'; +import { TopBar } from 'ts/components/top_bar/top_bar'; +import { Button } from 'ts/components/ui/button'; +import { Container } from 'ts/components/ui/container'; +import { Image } from 'ts/components/ui/image'; +import { Text } from 'ts/components/ui/text'; +import { Dispatcher } from 'ts/redux/dispatcher'; +import { Deco, Key, ScreenWidths } from 'ts/types'; +import { constants } from 'ts/utils/constants'; +import { Translate } from 'ts/utils/translate'; +import { utils } from 'ts/utils/utils'; + +export interface LaunchKitProps { + location: Location; + translate: Translate; + dispatcher: Dispatcher; +} + +interface LaunchKitState { + screenWidth: ScreenWidths; +} + +const THROTTLE_TIMEOUT = 100; +const lighterBackgroundColor = '#222222'; +const darkerBackgroundColor = '#1B1B1B'; +const grayText = '#999999'; + +interface Benefit { + icon: string; + description: string; +} + +export class LaunchKit extends React.Component<LaunchKitProps, LaunchKitState> { + private readonly _throttledScreenWidthUpdate: () => void; + constructor(props: LaunchKitProps) { + super(props); + this.state = { + screenWidth: utils.getScreenWidth(), + }; + this._throttledScreenWidthUpdate = _.throttle(this._updateScreenWidth.bind(this), THROTTLE_TIMEOUT); + } + public componentDidMount(): void { + window.addEventListener('resize', this._throttledScreenWidthUpdate); + window.scrollTo(0, 0); + } + public componentWillUnmount(): void { + window.removeEventListener('resize', this._throttledScreenWidthUpdate); + } + public render(): React.ReactNode { + return ( + <div id="launchKit" className="clearfix" style={{ color: colors.grey500 }}> + <DocumentTitle title="0x Launch Kit" /> + <TopBar + blockchainIsLoaded={false} + location={this.props.location} + isNightVersion={true} + style={{ backgroundColor: lighterBackgroundColor, position: 'relative' }} + translate={this.props.translate} + /> + {this._renderHero()} + {this._renderSection()} + {this._renderCallToAction()} + {this._renderDisclaimer()} + <Footer + backgroundColor={darkerBackgroundColor} + translate={this.props.translate} + dispatcher={this.props.dispatcher} + /> + </div> + ); + } + private _renderHero(): React.ReactNode { + const BENEFITS_1: Benefit[] = [ + { + icon: '/images/launch_kit/shared_liquidity.svg', + description: this.props.translate.get(Key.TapIntoAndShare, Deco.Cap), + }, + { + icon: '/images/launch_kit/fork.svg', + description: this.props.translate.get(Key.ForkAndExtend, Deco.Cap), + }, + { + icon: '/images/launch_kit/enable_trading.svg', + description: this.props.translate.get(Key.EnableTrading, Deco.Cap), + }, + ]; + const isSmallScreen = this.state.screenWidth === ScreenWidths.Sm; + const smallButtonPadding = '12px 30px 12px 30px'; + const largeButtonPadding = '14px 60px 14px 60px'; + const left = 'col lg-col-6 md-col-6 col-12 lg-pl2 md-pl2 sm-pl0 sm-px3 sm-center'; + const flexClassName = isSmallScreen + ? 'flex items-center flex-column justify-center' + : 'flex items-center justify-center'; + return ( + <div className="clearfix pt4" style={{ backgroundColor: lighterBackgroundColor }}> + <div className="mx-auto max-width-4 clearfix"> + <div className={`${flexClassName} lg-pb4 md-pb4 sm-mb4`}> + <div className={left} style={{ color: colors.white }}> + <div + className="inline-block lg-align-middle md-align-middle sm-align-top" + style={{ + paddingLeft: isSmallScreen ? 0 : 12, + lineHeight: '36px', + }} + > + <Text + className="sm-pb2" + fontFamily="Roboto" + display="inline-block" + fontColor={colors.white} + fontWeight="bold" + lineHeight="1.3em" + letterSpacing="1px" + fontSize={isSmallScreen ? '38px' : '46px'} + > + {this.props.translate.get(Key.LaunchKit, Deco.CapWords)} + </Text> + <Container paddingTop="18px"> + <Text fontColor={colors.linkSectionGrey} fontSize="18px"> + {this.props.translate.get(Key.LaunchKitPitch, Deco.Cap)} + </Text> + </Container> + <Container + paddingTop="54px" + className={`flex clearfix sm-mx-auto ${isSmallScreen ? 'justify-center' : ''}`} + > + <Container paddingRight="20px"> + <Link to={constants.URL_LAUNCH_KIT} shouldOpenInNewTab={true}> + <Button + padding={isSmallScreen ? smallButtonPadding : largeButtonPadding} + borderRadius="4px" + borderColor={colors.white} + > + <Text fontSize="16px" fontWeight="bold"> + {this.props.translate.get(Key.GetStarted, Deco.Cap)} + </Text> + </Button> + </Link> + </Container> + <div> + <Link to={constants.URL_LAUNCH_KIT_BLOG_POST} shouldOpenInNewTab={true}> + <Button + backgroundColor={lighterBackgroundColor} + borderColor={colors.white} + fontColor={colors.white} + padding={isSmallScreen ? smallButtonPadding : largeButtonPadding} + borderRadius="4px" + > + <Text fontSize="16px" fontWeight="bold" fontColor={colors.white}> + {this.props.translate.get(Key.LearnMore, Deco.Cap)} + </Text> + </Button> + </Link> + </div> + </Container> + </div> + </div> + <Container + marginTop={isSmallScreen ? '60px' : '30px'} + marginBottom="30px" + marginLeft="15px" + marginRight="15px" + > + <Image + src="/images/launch_kit/0x_cupboard.svg" + maxWidth={isSmallScreen ? '75%' : '100%'} + height="auto" + /> + </Container> + </div> + </div> + {this._renderBenefits(BENEFITS_1)} + </div> + ); + } + private _renderSection(): React.ReactNode { + const BENEFITS_2: Benefit[] = [ + { + icon: '/images/launch_kit/secondary_market.svg', + description: this.props.translate.get(Key.QuicklyLaunch, Deco.Cap), + }, + { + icon: '/images/launch_kit/in_game_marketplace.svg', + description: this.props.translate.get(Key.SeemlesslyCreate, Deco.Cap), + }, + { + icon: '/images/launch_kit/local_market.svg', + description: this.props.translate.get(Key.LocalMarket, Deco.Cap), + }, + ]; + return ( + <div className="clearfix pb4" style={{ backgroundColor: darkerBackgroundColor }}> + <Container + className="mx-auto" + textAlign="center" + paddingTop="89px" + paddingBottom="89px" + maxWidth="421px" + paddingLeft="10px" + paddingRight="10px" + > + <Text fontSize="26px" lineHeight="37px" fontWeight="medium" fontColor={colors.white}> + {this.props.translate.get(Key.PerfectForDevelopers, Deco.Cap)} + </Text> + </Container> + {this._renderBenefits(BENEFITS_2)} + </div> + ); + } + private _renderCallToAction(): React.ReactNode { + const isSmallScreen = this.state.screenWidth === ScreenWidths.Sm; + const smallButtonPadding = '8px 14px 8px 14px'; + const largeButtonPadding = '8px 14px 8px 14px'; + return ( + <Container + className="clearfix" + backgroundColor={lighterBackgroundColor} + paddingTop="90px" + paddingBottom="90px" + > + <Container className="clearfix mx-auto" maxWidth="850px"> + <Container className="lg-left md-left sm-mx-auto sm-pb3" width="348px"> + <Text fontColor={colors.white} fontSize="18px"> + View our comprehensive documentation to start building today. + </Text> + </Container> + <Container + className={`lg-right md-right flex clearfix sm-mx-auto ${ + isSmallScreen ? 'justify-center' : '' + }`} + paddingTop="5px" + > + <Container paddingRight="20px"> + <Link to={`${constants.URL_LAUNCH_KIT}/#table-of-contents`} shouldOpenInNewTab={true}> + <Button + padding={isSmallScreen ? smallButtonPadding : largeButtonPadding} + borderRadius="4px" + backgroundColor={lighterBackgroundColor} + borderColor={colors.white} + > + <Text fontSize="16px" fontWeight="bold" fontColor={colors.white}> + {this.props.translate.get(Key.ExploreTheDocs, Deco.Cap)} + </Text> + </Button> + </Link> + </Container> + <div> + <Link to={constants.URL_ZEROEX_CHAT} shouldOpenInNewTab={true}> + <Button + padding={isSmallScreen ? smallButtonPadding : largeButtonPadding} + borderRadius="4px" + > + <Text fontSize="16px" fontWeight="bold"> + {this.props.translate.get(Key.GetInTouch, Deco.Cap)} + </Text> + </Button> + </Link> + </div> + </Container> + </Container> + </Container> + ); + } + private _renderBenefits(benefits: Benefit[]): React.ReactNode { + return ( + <Container className="lg-flex md-flex justify-between mx-auto pb4" maxWidth="890px"> + {_.map(benefits, benefit => { + return ( + <Container className="mx-auto sm-pb4" width="240px"> + <Container textAlign="center"> + <img src={benefit.icon} /> + </Container> + <Container paddingTop="26px"> + <Text + fontSize="18px" + lineHeight="28px" + textAlign="center" + fontColor={colors.linkSectionGrey} + > + {benefit.description} + </Text> + </Container> + </Container> + ); + })} + </Container> + ); + } + private _renderDisclaimer(): React.ReactNode { + return ( + <Container + className="clearfix" + backgroundColor={darkerBackgroundColor} + paddingTop="70px" + paddingBottom="70px" + > + <Container className="mx-auto" maxWidth="850px" paddingLeft="20px" paddingRight="20px"> + <Text fontColor={grayText} fontSize="10px"> + <b>Disclaimer:</b> The laws and regulations applicable to the use and exchange of digital assets + and blockchain-native tokens, including through any software developed using the licensed work + created by ZeroEx Intl. (the “Work”), vary by jurisdiction. As set forth in the Apache License, + Version 2.0 applicable to the Work, developers are “solely responsible for determining the + appropriateness of using or redistributing the Work,” which includes responsibility for ensuring + compliance with any such applicable laws and regulations. + </Text> + <Container paddingTop="15px"> + <Text fontColor={grayText} fontSize="10px"> + See the{' '} + <Link + to={constants.URL_APACHE_LICENSE} + shouldOpenInNewTab={true} + textDecoration="underline" + > + Apache License, Version 2.0 + </Link>{' '} + for the specific language governing all applicable permissions and limitations. + </Text> + </Container> + </Container> + </Container> + ); + } + private _updateScreenWidth(): void { + const newScreenWidth = utils.getScreenWidth(); + if (newScreenWidth !== this.state.screenWidth) { + this.setState({ + screenWidth: newScreenWidth, + }); + } + } +} diff --git a/packages/website/ts/types.ts b/packages/website/ts/types.ts index ce4b50a58..444a8348d 100644 --- a/packages/website/ts/types.ts +++ b/packages/website/ts/types.ts @@ -352,6 +352,7 @@ export enum WebsitePaths { Home = '/', FAQ = '/faq', About = '/about', + LaunchKit = '/launch-kit', Whitepaper = '/pdfs/0x_white_paper.pdf', SmartContracts = '/docs/contracts', Connect = '/docs/connect', @@ -479,6 +480,19 @@ export enum Key { More = 'MORE', StartBuildOn0x = 'START_BUILDING_ON_0X', StartBuildOn0xDescription = 'START_BUILDING_ON_0X_DESCRIPTION', + LaunchKit = 'LAUNCH_KIT', + LaunchKitPitch = 'LAUNCH_KIT_PITCH', + ExploreTheDocs = 'EXPLORE_THE_DOCS', + EnableTrading = 'ENABLE_TRADING', + ForkAndExtend = 'FORK_AND_EXTEND', + LocalMarket = 'LOCAL_MARKET', + SeemlesslyCreate = 'SEEMLESSLY_CREATE', + QuicklyLaunch = 'QUICKLY_LAUNCH', + TapIntoAndShare = 'TAP_INTO_AND_SHARE', + PerfectForDevelopers = 'PERFECT_FOR_DEVELOPERS', + GetInTouch = 'GET_IN_TOUCH', + LearnMore = 'LEARN_MORE', + GetStarted = 'GET_STARTED', } export enum SmartContractDocSections { diff --git a/packages/website/ts/utils/constants.ts b/packages/website/ts/utils/constants.ts index 379f28022..e9afc8763 100644 --- a/packages/website/ts/utils/constants.ts +++ b/packages/website/ts/utils/constants.ts @@ -72,6 +72,7 @@ export const constants = { PROJECT_URL_OPEN_ANX: 'https://www.openanx.org', PROJECT_URL_IDT: 'https://kinalpha.com', URL_ANGELLIST: 'https://angel.co/0xproject/jobs', + URL_APACHE_LICENSE: 'http://www.apache.org/licenses/LICENSE-2.0', URL_BITLY_API: 'https://api-ssl.bitly.com', URL_BLOG: 'https://blog.0xproject.com/latest', URL_DISCOURSE_FORUM: 'https://forum.0xproject.com', @@ -95,6 +96,8 @@ export const constants = { URL_TWITTER: 'https://twitter.com/0xproject', URL_WETH_IO: 'https://weth.io/', URL_ZEROEX_CHAT, + URL_LAUNCH_KIT: 'https://github.com/0xProject/0x-launch-kit', + URL_LAUNCH_KIT_BLOG_POST: 'https://blog.0xproject.com/introducing-the-0x-launch-kit-4acdc3453585', URL_WEB3_DOCS: 'https://github.com/ethereum/wiki/wiki/JavaScript-API', URL_WEB3_DECODED_LOG_ENTRY_EVENT: 'https://github.com/0xProject/web3-typescript-typings/blob/f5bcb96/index.d.ts#L123', |