clustergrammer
Version:
This is a clustergram implemented in D3.js. I started from the example http://bost.ocks.org/mike/miserables/ and added the following features
113 lines (90 loc) • 3.33 kB
JavaScript
var make_config = require('./Config');
var make_params = require('./params/');
var make_viz = require('./Viz');
var resize_viz = require('./reset_size/resize_viz');
var play_demo = require('./demo/play_demo');
var ini_demo = require('./demo/ini_demo');
var filter_viz_using_nodes = require('./network/filter_viz_using_nodes');
var filter_viz_using_names = require('./network/filter_viz_using_names');
var update_cats = require('./update/update_cats');
var reset_cats = require('./update/reset_cats');
var two_translate_zoom = require('./zoom/two_translate_zoom');
var external_update_view = require('./update/external_update_view');
var export_matrix = require('./matrix/export_matrix');
var crop_matrix = require('./matrix/crop_matrix');
var run_zoom = require('./zoom/run_zoom');
var d3_tip_custom = require('./tooltip/d3_tip_custom');
// moved d3.slider to src
d3.slider = require('./d3.slider');
/* eslint-disable */
var awesomplete = require('awesomplete');
// getting css from src
require('!style!css!./d3.slider/d3.slider.css');
require('!style!css!awesomplete/awesomplete.css');
/* clustergrammer v1.11.6
* Nick Fernandez, Ma'ayan Lab, Icahn School of Medicine at Mount Sinai
* (c) 2017
*/
function Clustergrammer(args) {
/* Main program
* ----------------------------------------------------------------------- */
// consume and validate user input
// build giant config object
// visualize based on config object
// handle user events
// consume and validate user arguments, produce configuration object
var config = make_config(args);
var cgm = {};
// make visualization parameters using configuration object
cgm.params = make_params(config);
cgm.config = config;
// set up zoom
cgm.params.zoom_behavior = d3.behavior.zoom()
.scaleExtent([1, cgm.params.viz.real_zoom * cgm.params.viz.zoom_switch])
.on('zoom', function(){
run_zoom(cgm);
});
cgm.params.zoom_behavior.translate([cgm.params.viz.clust.margin.left, cgm.params.viz.clust.margin.top]);
if (cgm.params.use_sidebar) {
var make_sidebar = require('./sidebar/');
make_sidebar(cgm);
}
// make visualization using parameters
make_viz(cgm);
function external_resize() {
d3.select(cgm.params.viz.viz_svg).style('opacity', 0.5);
var wait_time = 500;
if (this.params.viz.run_trans === true){
wait_time = 2500;
}
setTimeout(resize_fun, wait_time, this);
}
function resize_fun(cgm){
resize_viz(cgm);
}
function run_update_cats(cat_data){
update_cats(this, cat_data);
}
function zoom_api(pan_dx, pan_dy, fin_zoom){
two_translate_zoom(this.params, pan_dx, pan_dy, fin_zoom);
}
function expose_d3_tip_custom(){
// this allows external modules to have access to d3_tip
return d3_tip_custom
}
// add more API endpoints
cgm.update_view = external_update_view;
cgm.resize_viz = external_resize;
cgm.play_demo = play_demo;
cgm.ini_demo = ini_demo;
cgm.filter_viz_using_nodes = filter_viz_using_nodes;
cgm.filter_viz_using_names = filter_viz_using_names;
cgm.update_cats = run_update_cats;
cgm.reset_cats = reset_cats;
cgm.zoom = zoom_api;
cgm.export_matrix = export_matrix;
cgm.crop_matrix = crop_matrix;
cgm.d3_tip_custom = expose_d3_tip_custom;
return cgm;
}
module.exports = Clustergrammer;