ngx-dygraphs
Version:
Angular 2+ and 4+ library for support of dygraphs(<http://dygraphs.com>) charts.
259 lines (252 loc) • 11.4 kB
JavaScript
import { Component, Input, NgModule, ViewChild } from '@angular/core';
import { CommonModule } from '@angular/common';
/**
* Wrapper arround Dygraphs
*
* \@class NgxDygraphsComponent
*/
class NgxDygraphsComponent {
/**
* @return {?}
*/
ngOnInit() {
this.noDataLabel = this.noDataLabel || 'NO DATA AVAILABLE';
this.chartWidth = (this.options && this.options.width) || 640;
this.chartHeight = (this.options && this.options.height) || 480;
}
/**
* ngOnChanges
* \@method ngOnChanges
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (!changes) {
return;
}
if (!this.data || !this.data.length) {
this.loadingInProgress = false;
return;
}
this.loadingInProgress = true;
const /** @type {?} */ options = Object.assign({}, this.options);
if (!options.width) {
options.width = this.chartWidth;
}
if (!options.height) {
options.height = this.chartHeight;
}
if (!options.legend) {
options.legend = 'always';
}
setTimeout(() => {
this.dygraph = new Dygraph(this.chart.nativeElement, this.data, options);
this.loadingInProgress = false;
this.dygraph.ready(graph => {
this.watchRangeSelector(graph);
});
}, 500);
}
/**
* @param {?} index
* @param {?} value
* @return {?}
*/
changeVisibility(index, value) {
this.dygraph.setVisibility(index, value);
}
/**
* @param {?} graph
* @return {?}
*/
watchRangeSelector(graph) {
const /** @type {?} */ observer = new MutationObserver(function (mutations) {
if (mutations.length === 2) {
// Zoom to the same zoom to trigger zoomCallback
const /** @type {?} */ zoomCallback = graph.getFunctionOption('zoomCallback');
const [minX, maxX] = graph.xAxisRange();
zoomCallback.call(graph, minX, maxX, graph.yAxisRanges());
}
});
Array.from(document.getElementsByClassName('dygraph-rangesel-zoomhandle')).forEach(
// work on range selector handles
function (element, idx, arr) {
// watch for style changes
observer.observe(element, { attributes: true, attributeFilter: ['style'] });
});
}
}
NgxDygraphsComponent.decorators = [
{ type: Component, args: [{
selector: 'ngx-dygraphs',
template: `
<div class="ng-dygraphs">
<div *ngIf="loadingInProgress" class="loader-holder">
<div class="loader"></div>
</div>
<div class="ng-dygraphs-chart-container">
<div [ngClass]="{'hide': !data?.length}" #chart [style.width.px]="chartWidth" [style.height.px]="chartHeight"></div>
<div *ngIf="!data?.length" class="nodata" [style.width.px]="chartWidth" [style.height.px]="chartHeight">
{{noDataLabel}}
</div>
</div>
</div>
`,
styles: [`
.ng-dygraphs {
position: relative; }
.ng-dygraphs .name-nodes-holder {
display: -ms-flexbox;
display: -webkit-box;
display: flex;
-ms-flex-direction: row;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
flex-direction: row;
padding-right: 30px;
padding-left: 30px; }
.ng-dygraphs .ng-dygraphs-chart-container {
background-color: #fff;
padding: 0;
margin: 5px;}
.ng-dygraphs .ng-dygraphs-chart-container .nodata {
display: -ms-flexbox;
display: -webkit-box;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
color: #5c5c5c;
font-weight: bold;
font-size: 24px;
display: flex;
-ms-flex-line-pack: center;
align-content: center; }
.ng-dygraphs .ng-dygraphs-chart-container .hide {
display: none; }
.ng-dygraphs .loader-holder {
position: absolute;
display: -ms-flexbox;
display: -webkit-box;
display: flex;
-ms-flex-align: center;
-webkit-box-align: center;
align-items: center;
width: 100%;
height: 100%;
background-color: #fff;
z-index: 55;
opacity: 0.9; }
.ng-dygraphs .loader {
color: #0dc5c1;
font-size: 20px;
margin: 100px auto;
width: 1em;
height: 1em;
border-radius: 50%;
position: relative;
text-indent: -9999em;
-webkit-animation: load4 1.3s infinite linear;
animation: load4 1.3s infinite linear;
-webkit-transform: translateZ(0);
transform: translateZ(0); }
@-webkit-keyframes load4 {
0%,
100% {
-webkit-box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0; }
12.5% {
-webkit-box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; }
25% {
-webkit-box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; }
37.5% {
-webkit-box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em; }
50% {
-webkit-box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em; }
62.5% {
-webkit-box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em; }
75% {
-webkit-box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0; }
87.5% {
-webkit-box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em; } }
load4 {
0%,
100% {
-webkit-box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0; }
12.5% {
-webkit-box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; }
25% {
-webkit-box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; }
37.5% {
-webkit-box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em; }
50% {
-webkit-box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em; }
62.5% {
-webkit-box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em; }
75% {
-webkit-box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0; }
87.5% {
-webkit-box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em; } }
`]
},] },
];
/**
* @nocollapse
*/
NgxDygraphsComponent.ctorParameters = () => [];
NgxDygraphsComponent.propDecorators = {
'options': [{ type: Input },],
'data': [{ type: Input },],
'noDataLabel': [{ type: Input },],
'chart': [{ type: ViewChild, args: ['chart',] },],
};
class NgxDygraphsModule {
/**
* @return {?}
*/
static forRoot() {
return {
ngModule: NgxDygraphsModule
};
}
}
NgxDygraphsModule.decorators = [
{ type: NgModule, args: [{
imports: [
CommonModule
],
declarations: [
NgxDygraphsComponent
],
exports: [
NgxDygraphsComponent
]
},] },
];
/**
* @nocollapse
*/
NgxDygraphsModule.ctorParameters = () => [];
/**
* Generated bundle index. Do not edit.
*/
export { NgxDygraphsComponent, NgxDygraphsModule };
//# sourceMappingURL=ngx-dygraphs.js.map