From e98caf6e5173c858b07102137a71749580762c30 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 8 Nov 2017 23:19:26 -0800 Subject: [PATCH] Final polish --- .../Editor/components/BlockInsert.js | 32 ++++++++++--------- .../Editor/components/HorizontalRule.js | 2 ++ .../Editor/components/Toolbar/Toolbar.js | 2 +- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/app/components/Editor/components/BlockInsert.js b/app/components/Editor/components/BlockInsert.js index fa08e1aa2..475b97577 100644 --- a/app/components/Editor/components/BlockInsert.js +++ b/app/components/Editor/components/BlockInsert.js @@ -31,8 +31,8 @@ export default class BlockInsert extends Component { props: Props; mouseMoveTimeout: number; mouseMovementSinceClick: number = 0; - mouseClickX: number = 0; - mouseClickY: number = 0; + lastClientX: number = 0; + lastClientY: number = 0; @observable closestRootNode: Node; @observable active: boolean = false; @@ -40,12 +40,10 @@ export default class BlockInsert extends Component { @observable left: number; componentDidMount = () => { - window.addEventListener('mousedown', this.handleWindowClick); window.addEventListener('mousemove', this.handleMouseMove); }; componentWillUnmount = () => { - window.removeEventListener('mousedown', this.handleWindowClick); window.removeEventListener('mousemove', this.handleMouseMove); }; @@ -56,19 +54,24 @@ export default class BlockInsert extends Component { handleMouseMove = (ev: SyntheticMouseEvent) => { const windowWidth = window.innerWidth / 2.5; const result = findClosestRootNode(this.props.state, ev); - const movementToReset = 1000; + const movementThreshold = 200; + + this.mouseMovementSinceClick += + Math.abs(this.lastClientX - ev.clientX) + + Math.abs(this.lastClientY - ev.clientY); + this.lastClientX = ev.clientX; + this.lastClientY = ev.clientY; - this.mouseMovementSinceClick += Math.abs(this.mouseClickX - ev.clientX); this.active = ev.clientX < windowWidth && - this.mouseMovementSinceClick > movementToReset; + this.mouseMovementSinceClick > movementThreshold; if (result) { this.closestRootNode = result.node; // do not show block menu on title heading or editor - const { type } = result.node; - if (type === 'heading1' || type === 'block-toolbar') { + const firstNode = this.props.state.document.nodes.first(); + if (result.node === firstNode || result.node.type === 'block-toolbar') { this.left = -1000; } else { this.left = Math.round(result.bounds.left - 20); @@ -82,14 +85,10 @@ export default class BlockInsert extends Component { } }; - handleWindowClick = (ev: SyntheticMouseEvent) => { - this.mouseClickX = ev.clientX; - this.mouseClickY = ev.clientY; + handleClick = (ev: SyntheticMouseEvent) => { this.mouseMovementSinceClick = 0; this.active = false; - }; - handleClick = () => { const { state } = this.props; const type = { type: 'block-toolbar', isVoid: true }; let transform = state.transform(); @@ -101,7 +100,10 @@ export default class BlockInsert extends Component { } }); - transform.collapseToStartOf(this.closestRootNode).insertBlock(type); + transform + .collapseToStartOf(this.closestRootNode) + .collapseToEndOfPreviousBlock() + .insertBlock(type); this.props.onChange(transform.apply()); }; diff --git a/app/components/Editor/components/HorizontalRule.js b/app/components/Editor/components/HorizontalRule.js index 7c6d8a68e..79cd52c39 100644 --- a/app/components/Editor/components/HorizontalRule.js +++ b/app/components/Editor/components/HorizontalRule.js @@ -11,6 +11,8 @@ function HorizontalRule(props: Props) { } const StyledHr = styled.hr` + padding-top: .75em; + margin: 0; border: 0; border-bottom: 1px solid ${props => (props.active ? color.slate : color.slateLight)}; `; diff --git a/app/components/Editor/components/Toolbar/Toolbar.js b/app/components/Editor/components/Toolbar/Toolbar.js index 281d40cbc..d34966d90 100644 --- a/app/components/Editor/components/Toolbar/Toolbar.js +++ b/app/components/Editor/components/Toolbar/Toolbar.js @@ -140,7 +140,7 @@ export default class Toolbar extends Component { const Menu = styled.div` padding: 8px 16px; position: absolute; - z-index: 1; + z-index: 2; top: -10000px; left: -10000px; opacity: 0;