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
86 lines (64 loc) • 2.28 kB
JavaScript
var utils = require('../Utils_clust');
var get_filter_default_state = require('./get_filter_default_state');
module.exports = function get_subset_views(params, views, requested_view){
var inst_value;
var found_filter;
var request_filters = _.keys(requested_view);
// find a view that matches all of the requested view/filter-attributes
_.each(request_filters, function(inst_filter){
inst_value = requested_view[inst_filter];
// if the value is a number, then convert it to an integer
if ( /[^a-z_]/i.test( inst_value ) ){
inst_value = parseInt(inst_value,10);
}
// only run filtering if any of the views has the filter
found_filter = false;
_.each(views, function(tmp_view){
if ( utils.has(tmp_view, inst_filter) ){
found_filter = true;
}
});
if (found_filter){
views = _.filter(views, function(d){
return d[inst_filter] == inst_value;
});
}
});
// remove duplicate complete default states
var export_views = [];
var found_default = false;
var check_default;
var inst_default_state;
// check if each view is a default state: all filters are at default
// there can only be one of these
_.each(views, function(inst_view){
check_default = true;
// check each filter in a view to see if it is in the default state
_.each( _.keys(params.viz.possible_filters), function(inst_filter){
inst_default_state = get_filter_default_state( params.viz.filter_data, inst_filter );
if (inst_view[inst_filter] != inst_default_state){
check_default = false;
}
});
// found defaule view, only append if you have not already found a default
if (check_default){
if (found_default === false){
found_default = true;
export_views.push(inst_view);
}
} else {
export_views.push(inst_view);
}
});
// if (export_views.length > 1){
// console.log('found more than one view in get_subset_views')
// console.log(requested_view)
// console.log(export_views)
// } else {
// console.log('found single view in get_subset_views')
// console.log(requested_view)
// console.log(export_views[0])
// console.log('\n')
// }
return export_views;
};