import 'zone.js';
import 'reflect-metadata';
import { Component, enableProdMode, NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { ViserModule, registerShape } from 'viser-ng';
import * as $ from 'jquery';
const DataSet = require('@antv/data-set');
registerShape('point', 'cloud', {
draw(cfg, container) {
return container.addShape('text', {
attrs: {
fillOpacity: cfg.opacity,
fontSize: cfg.origin._origin.size,
rotate: cfg.origin._origin.rotate,
text: cfg.origin._origin.text,
textAlign: 'center',
fontFamily: cfg.origin._origin.font,
fill: cfg.color,
textBaseline: 'Alphabetic',
...cfg.style,
x: cfg.x,
y: cfg.y,
},
});
}
});
const scale = [
{ dataKey: 'x', nice: false },
{ dataKey: 'y', nice: false },
];
const padding = [0];
@Component({
selector: '#mount',
template: `
`
})
class AppComponent {
scale = scale;
data = [];
constructor() {
$.getJSON('/assets/data/antv-keywords.json', (data) => {
const dv = new DataSet.View().source(data);
const range = dv.range('value');
const min = range[0];
const max = range[1];
const imageMask = new Image();
imageMask.crossOrigin = '';
imageMask.src = '/assets/image/logo-mask-16x9.png';
imageMask.onload = () => {
dv.transform({
type: 'tag-cloud',
fields: ['name', 'value'],
imageMask,
size: [640, 400],
font: 'Verdana',
padding: 0,
timeInterval: 5000, // max execute time
rotate() {
let random = ~~(Math.random() * 4) % 4;
if (random == 2) {
random = 0;
}
return random * 90; // 0, 90, 270
},
fontSize(d) {
if (d.value) {
return ((d.value - min) / (max - min)) * (32 - 8) + 8;
}
return 0;
}
});
this.data = dv.rows;
}
});
}
}
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
ViserModule
],
providers: [],
bootstrap: [
AppComponent
]
})
export default class AppModule { }