diff options
author | Brandon Millman <brandon.millman@gmail.com> | 2018-03-15 05:36:04 +0800 |
---|---|---|
committer | Brandon Millman <brandon.millman@gmail.com> | 2018-03-15 05:36:04 +0800 |
commit | 380e51ca505a880e1ac24f46b3ba7e1a736f693e (patch) | |
tree | 95e0311485834d8181171da821f258dd46a2d258 /packages/react-shared/src/components/anchor_title.tsx | |
parent | 6a8c2cb7172be9b0aadb34904d1d9b3348bed0cc (diff) | |
parent | aea7207b9f9865a279243889a5f9ca1638ddc739 (diff) | |
download | dexon-0x-contracts-380e51ca505a880e1ac24f46b3ba7e1a736f693e.tar dexon-0x-contracts-380e51ca505a880e1ac24f46b3ba7e1a736f693e.tar.gz dexon-0x-contracts-380e51ca505a880e1ac24f46b3ba7e1a736f693e.tar.bz2 dexon-0x-contracts-380e51ca505a880e1ac24f46b3ba7e1a736f693e.tar.lz dexon-0x-contracts-380e51ca505a880e1ac24f46b3ba7e1a736f693e.tar.xz dexon-0x-contracts-380e51ca505a880e1ac24f46b3ba7e1a736f693e.tar.zst dexon-0x-contracts-380e51ca505a880e1ac24f46b3ba7e1a736f693e.zip |
Merge branch 'development' into feature/utils/console-log
* development: (25 commits)
Enable coverage for all other packages with tests
Fix parallel coverage results reporting
Fix linter issuesx
Remove outdated comment
Add script copying to build command
Add postpublish script to sol-cov
Move configuration into package.json configs section
Transform input data before encoding for callAsync and getABIEncodedTransactionData
Consolidate docs generation and uploading logic
Use async/await instead of promise syntax
Move changelog entry
remove unneeded include
remove unused dep
Fix lint issues
Re-add linter to monorepo-scripts but with tslint-config dep at earlier version to avoid cyclical dependency
small fixes
move scripts to monorepro-scripts
Fix gitignore
Move abi-gen scripts to src
Add missing dep
...
Diffstat (limited to 'packages/react-shared/src/components/anchor_title.tsx')
-rw-r--r-- | packages/react-shared/src/components/anchor_title.tsx | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/packages/react-shared/src/components/anchor_title.tsx b/packages/react-shared/src/components/anchor_title.tsx new file mode 100644 index 000000000..f44354097 --- /dev/null +++ b/packages/react-shared/src/components/anchor_title.tsx @@ -0,0 +1,87 @@ +import * as React from 'react'; +import { Link as ScrollLink } from 'react-scroll'; + +import { HeaderSizes, Styles } from '../types'; +import { constants } from '../utils/constants'; +import { utils } from '../utils/utils'; + +const headerSizeToScrollOffset: { [headerSize: string]: number } = { + h2: -20, + h3: 0, +}; + +export interface AnchorTitleProps { + title: string | React.ReactNode; + id: string; + headerSize: HeaderSizes; + shouldShowAnchor: boolean; +} + +export interface AnchorTitleState { + isHovering: boolean; +} + +const styles: Styles = { + anchor: { + fontSize: 20, + transform: 'rotate(45deg)', + cursor: 'pointer', + }, + headers: { + WebkitMarginStart: 0, + WebkitMarginEnd: 0, + fontWeight: 'bold', + display: 'block', + }, + h1: { + fontSize: '1.8em', + }, + h2: { + fontSize: '1.5em', + fontWeight: 400, + }, + h3: { + fontSize: '1.17em', + }, +}; + +export class AnchorTitle extends React.Component<AnchorTitleProps, AnchorTitleState> { + constructor(props: AnchorTitleProps) { + super(props); + this.state = { + isHovering: false, + }; + } + public render() { + let opacity = 0; + if (this.props.shouldShowAnchor) { + opacity = this.state.isHovering ? 0.6 : 1; + } + return ( + <div className="relative flex" style={{ ...styles[this.props.headerSize], ...styles.headers }}> + <div className="inline-block" style={{ paddingRight: 4 }}> + {this.props.title} + </div> + <ScrollLink + to={this.props.id} + offset={headerSizeToScrollOffset[this.props.headerSize]} + duration={constants.DOCS_SCROLL_DURATION_MS} + containerId={constants.DOCS_CONTAINER_ID} + > + <i + className="zmdi zmdi-link" + onClick={utils.setUrlHash.bind(utils, this.props.id)} + style={{ ...styles.anchor, opacity }} + onMouseOver={this._setHoverState.bind(this, true)} + onMouseOut={this._setHoverState.bind(this, false)} + /> + </ScrollLink> + </div> + ); + } + private _setHoverState(isHovering: boolean) { + this.setState({ + isHovering, + }); + } +} |