rozetko
11 months ago
6 changed files with 145 additions and 2 deletions
@ -0,0 +1,40 @@ |
|||||||
|
const path = require('path'); |
||||||
|
|
||||||
|
function resolve(dir) { |
||||||
|
return path.join(__dirname, '..', dir) |
||||||
|
} |
||||||
|
|
||||||
|
module.exports = { |
||||||
|
context: resolve('demo'), |
||||||
|
entry: './demo_pod.ts', |
||||||
|
plugins: [], |
||||||
|
devtool: 'inline-source-map', |
||||||
|
watch: true, |
||||||
|
mode: 'development', |
||||||
|
module: { |
||||||
|
rules: [ |
||||||
|
{ |
||||||
|
test: /\.ts$/, |
||||||
|
use: 'ts-loader', |
||||||
|
exclude: /node_modules/ |
||||||
|
}, |
||||||
|
{ |
||||||
|
test: /\.css$/, |
||||||
|
use: [ |
||||||
|
{ loader: 'style-loader', options: { injectType: 'lazyStyleTag' } }, |
||||||
|
'css-loader', |
||||||
|
], |
||||||
|
exclude: /node_modules/ |
||||||
|
} |
||||||
|
], |
||||||
|
}, |
||||||
|
resolve: { |
||||||
|
extensions: ['.ts', '.js'], |
||||||
|
}, |
||||||
|
output: { |
||||||
|
filename: 'demo.js', |
||||||
|
path: resolve('demo/dist'), |
||||||
|
libraryTarget: 'umd', |
||||||
|
umdNamedDefine: true |
||||||
|
} |
||||||
|
}; |
@ -0,0 +1,5 @@ |
|||||||
|
### HOW TO RUN |
||||||
|
|
||||||
|
run `yarn run dev` and `yarn run demo` in separate terminals simultaneously. |
||||||
|
|
||||||
|
open `demo.html` in your browser. |
@ -0,0 +1,38 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta content="text/html;charset=utf-8" http-equiv="Content-Type"> |
||||||
|
<meta content="utf-8" http-equiv="encoding"> |
||||||
|
|
||||||
|
<script src="./dist/demo.js" type="text/javascript"></script> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
<div id="chart" style="width: 50%; height: 500px;"></div> |
||||||
|
|
||||||
|
<script type="text/javascript"> |
||||||
|
const startTime = 1590590148; |
||||||
|
const arrayLength = 20; |
||||||
|
const data1 = Array.from({ length: arrayLength }, (el, idx) => [startTime + idx * 10000, Math.floor(Math.random() * 40)]); |
||||||
|
|
||||||
|
let options = { |
||||||
|
renderLegend: false, |
||||||
|
axis: { |
||||||
|
y: { range: [0, 350] }, |
||||||
|
x: { format: 'time' } |
||||||
|
}, |
||||||
|
zoomEvents: { |
||||||
|
mouse: { zoom: { isActive: false }, pan: { isActive: false } }, |
||||||
|
scroll: { zoom: { isActive: false } } |
||||||
|
}, |
||||||
|
} |
||||||
|
var pod = new DemoPod( |
||||||
|
document.getElementById('chart'), |
||||||
|
[ |
||||||
|
{ target: 'test1', datapoints: data1, color: 'green' }, |
||||||
|
], |
||||||
|
options |
||||||
|
); |
||||||
|
pod.render(); |
||||||
|
</script> |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,61 @@ |
|||||||
|
import { |
||||||
|
ChartwerkPod, |
||||||
|
Serie, |
||||||
|
Options |
||||||
|
} from '../dist/index'; |
||||||
|
|
||||||
|
import * as d3 from 'd3'; |
||||||
|
import * as _ from 'lodash'; |
||||||
|
|
||||||
|
|
||||||
|
class DemoPod extends ChartwerkPod<Serie, Options> { |
||||||
|
lineGenerator = null; |
||||||
|
|
||||||
|
constructor( |
||||||
|
_el: HTMLElement, |
||||||
|
_series: Serie[] = [], |
||||||
|
_options: Options = {}, |
||||||
|
) { |
||||||
|
super(_el, _series, _options); |
||||||
|
} |
||||||
|
|
||||||
|
override renderMetrics(): void { |
||||||
|
this.clearAllMetrics(); |
||||||
|
this.initLineGenerator(); |
||||||
|
for(const serie of this.series.visibleSeries) { |
||||||
|
this.renderLine(serie); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
clearAllMetrics(): void { |
||||||
|
// TODO: temporary hack before it will be implemented in core.
|
||||||
|
this.chartContainer.selectAll('.metric-el').remove(); |
||||||
|
} |
||||||
|
|
||||||
|
initLineGenerator(): void { |
||||||
|
this.lineGenerator = d3.line() |
||||||
|
.x(d => this.state.xScale(d[0])) |
||||||
|
.y(d => this.state.yScale(d[1])); |
||||||
|
} |
||||||
|
|
||||||
|
renderLine(serie: Serie): void { |
||||||
|
this.metricContainer |
||||||
|
.append('path') |
||||||
|
.datum(serie.datapoints) |
||||||
|
.attr('class', `metric-path-${serie.idx} metric-el ${serie.class}`) |
||||||
|
.attr('fill-opacity', 0) |
||||||
|
.attr('stroke', serie.color) |
||||||
|
.attr('stroke-width', 1) |
||||||
|
.attr('stroke-opacity', 0.7) |
||||||
|
.attr('pointer-events', 'none') |
||||||
|
.attr('d', this.lineGenerator); |
||||||
|
} |
||||||
|
|
||||||
|
onMouseMove(): void {} |
||||||
|
onMouseOver(): void {} |
||||||
|
onMouseOut(): void {} |
||||||
|
renderSharedCrosshair(values): void {} |
||||||
|
hideSharedCrosshair(): void {} |
||||||
|
} |
||||||
|
|
||||||
|
export { DemoPod }; |
Loading…
Reference in new issue