diff --git a/src/components/Timeline.jsx b/src/components/Timeline.jsx index f0dce23..c719778 100644 --- a/src/components/Timeline.jsx +++ b/src/components/Timeline.jsx @@ -7,6 +7,7 @@ import copy from '../js/data/copy.json'; import { formatterWithYear, isNotNullNorUndefined } from '../js/utilities'; import TimelineHeader from './presentational/TimelineHeader'; import TimelineHandles from './TimelineHandles.jsx'; +import TimelineZoomControls from './TimelineZoomControls.jsx'; import TimelineLogic from '../js/timeline/timeline.js'; @@ -43,7 +44,7 @@ class Timeline extends React.Component { if (document.querySelector(`#${this.props.ui.dom.timeline}`) !== null) { const boundingClient = document.querySelector(`#${this.props.ui.dom.timeline}`).getBoundingClientRect(); - WIDTH = boundingClient.width - WIDTH_CONTROLS; + WIDTH = boundingClient.width; } return { height: HEIGHT, @@ -61,19 +62,27 @@ class Timeline extends React.Component { return ''; } + onApplyZoom(zoom) { + if (this.timeline) { + return this.timeline.applyZoom(zoom); + } + return ''; + } + renderSVG() { - const { width, height, margin_left } = this.getClientDims(); + const dims = this.getClientDims(); return ( - + - { this.onMoveTime(dir) }} /> + { this.onMoveTime(dir) }} /> + { this.onApplyZoom(zoom); }} /> ); } diff --git a/src/components/TimelineHandles.jsx b/src/components/TimelineHandles.jsx index 7e69432..1e8b5df 100644 --- a/src/components/TimelineHandles.jsx +++ b/src/components/TimelineHandles.jsx @@ -11,7 +11,7 @@ class TimelineHandles extends React.Component { - this.props.onMoveTime('forward')}> + this.props.onMoveTime('forward')}> diff --git a/src/components/TimelineZoomControls.jsx b/src/components/TimelineZoomControls.jsx new file mode 100644 index 0000000..51ce7a7 --- /dev/null +++ b/src/components/TimelineZoomControls.jsx @@ -0,0 +1,29 @@ +import React from 'react'; + +class TimelineZoomControls extends React.Component { + + renderZoom(zoom, idx) { + return ( + this.props.onApplyZoom(zoom)} + > + {zoom.label} + + ) + } + + render() { + const dims = this.props.dims; + + return ( + + {this.props.zoomLevels.map((z, idx) => this.renderZoom(z, idx))} + + ); + } +} + +export default TimelineZoomControls; \ No newline at end of file diff --git a/src/js/timeline/timeline.js b/src/js/timeline/timeline.js index d362782..64ed9ba 100644 --- a/src/js/timeline/timeline.js +++ b/src/js/timeline/timeline.js @@ -132,12 +132,12 @@ console.log(svg) // dom.backwards.append('circle'); // dom.backwards.append('path'); - dom.zooms = dom.controls.append('g'); - - dom.zooms.selectAll('.zoom-level-button') - .data(app.zoomLevels) - .enter().append('text') - .attr('class', 'zoom-level-button'); +// dom.zooms = dom.controls.append('g'); +// +// dom.zooms.selectAll('.zoom-level-button') +// .data(app.zoomLevels) +// .enter().append('text') +// .attr('class', 'zoom-level-button'); /* @@ -251,18 +251,18 @@ console.log(svg) /* * TODO: Highlight zoom level based on time range selected */ - function highlightZoomLevel(zoom) { - app.zoomLevels.forEach((level) => { - if (level.label === zoom.label) { - level.active = true; - } else { - level.active = false; - } - }); - - dom.zooms.selectAll('text') - .classed('active', level => level.active); - } +// function highlightZoomLevel(zoom) { +// app.zoomLevels.forEach((level) => { +// if (level.label === zoom.label) { +// level.active = true; +// } else { +// level.active = false; +// } +// }); +// +// dom.zooms.selectAll('text') +// .classed('active', level => level.active); +// } /** @@ -270,7 +270,7 @@ console.log(svg) * @param {object} zoom: zoom level from zoomLevels */ function applyZoom(zoom) { - highlightZoomLevel(zoom); +// highlightZoomLevel(zoom); const extent = getTimeScaleExtent(); const newCentralTime = d3.timeMinute.offset(scale.x.domain()[0], extent / 2); @@ -507,14 +507,14 @@ console.log(svg) // .attr('d', d3.symbol().type(d3.symbolTriangle).size(80)) // .attr('transform', `translate(${scale.x.range()[1] - 20}, 62)rotate(90)`); - dom.zooms.selectAll('text') - .text(d => d.label) - .attr('x', 60) - .attr('y', (d, i) => (i * 15) + 20) - .classed('active', level => level.active); - - dom.zooms.selectAll('text') - .on('click', zoom => applyZoom(zoom)); +// dom.zooms.selectAll('text') +// .text(d => d.label) +// .attr('x', 60) +// .attr('y', (d, i) => (i * 15) + 20) +// .classed('active', level => level.active); +// +// dom.zooms.selectAll('text') +// .on('click', zoom => applyZoom(zoom)); } @@ -583,6 +583,7 @@ console.log(svg) } return { + applyZoom, moveTime, update, };