Devel-SizeMe
view release on metacpan or search on metacpan
lib/Devel/SizeMe/Graph/static/treemap.js view on Meta::CPAN
onShow: function(tip, node, isLeaf, domElement) {
// XXX all this needs html escaping
var data = node.data;
var html = "<div class=\"tip-title\">"
+ (data.title ? "\""+data.title+"\"" : "")
+ " " + data.name
+ "</div><div class=\"tip-text\">";
html += "<br />";
html += sprintf("Memory use: %s<br />", bytesToSize(data.self_size+data.kids_size,2));
if (data.kids_size) {
html += sprintf("Child use: %s<br />", bytesToSize(data.kids_size,2));
}
if (data.self_size) {
if (data.kids_size)
html += sprintf("Own use: %s<br />", bytesToSize(data.self_size,2));
}
$("#sizeme_data_div").JSONView({
"attributes": data.attr,
"parts": data.leaves,
"depth": data.depth,
"kids_node_count": data.kids_node_count,
"kids_size_bytes": data.kids_size,
"self_size_bytes": data.self_size,
"name": data.name,
"title": data.title,
"parent_id": data.parent_id,
"id": sprintf("%s%s", node.id, data._ids_merged ? data._ids_merged : "")
});
tip.innerHTML = html;
}
},
//Implement this method for retrieving a requested
//subtree that has as root a node with id = nodeId,
//and level as depth. This method could also make a server-side
//call for the requested subtree. When completed, the onComplete
//callback method should be called.
request: function(nodeId, level, onComplete){
request_jit_tree(nodeId, level, levelsToShow, function(data) {
console.log({ "node": nodeId, "request_jit_tree": data});
update_node_path(data);
onComplete.onComplete(nodeId, data.nodes);
});
// XXX workaround jit bug where old tooltip is still shown till the
// mouse moves
jQuery("#_tooltip").fadeOut("fast");
},
//Add the name of the node in the corresponding label
//This method is called once, on label creation and only for DOM labels.
onCreateLabel: function(domElement, node){
domElement.innerHTML = node.name;
// this doesn't work with Label:{} above
var style = domElement.style;
style.display = '';
style.border = '1px solid transparent';
domElement.onmouseover = function() {
style.border = '1px solid #9FD4FF';
};
domElement.onmouseout = function() {
style.border = '1px solid transparent';
};
},
onPlaceLabel: function(domElement, node){ },
});
function request_jit_tree(nodeId, level, levelsToShow, onComplete){
var params = jQuery('#sizeme_params_form').serialize();
jQuery.getJSON('jit_tree/'+nodeId+'/'+levelsToShow, params, onComplete);
}
function request_jit_tree_for_node_and_refresh(nodeId){
if (!nodeId)
nodeId = 1;
console.log({ request_jit_tree_for_node_and_refresh: nodeId });
request_jit_tree(nodeId, 0, levelsToShow, function(data) {
console.log({ request_jit_tree: data });
update_node_path(data);
tm.loadJSON(data.nodes);
tm.refresh();
});
}
function update_node_path(data){
jQuery("#sizeme_path_ul").html(data.name_path_html);
// update #sizeme_path_ul
// <li><a href="#">Home</a> <span class="divider">/</span></li>
// <li><a href="#">Library</a> <span class="divider">/</span></li>
// <li class="active">Data</li>
}
request_jit_tree_for_node_and_refresh(window.location.pathname.split('/')[1]); // XXX get from url
//add event to buttons
$jit.util.addEvent($jit.id('goto_parent'), 'click', function() {
// record new node in history
var parents = tm.graph.getNode(tm.clickedNode && tm.clickedNode.id || tm.root).getParents();
var parent_id = parents[0].id;
window.history.pushState({ "id":parent_id }, "", "/"+parent_id+"?"+jQuery('#sizeme_params_form').serialize());
// move out one level with a nice animation
tm.out();
});
jQuery('#sizeme_logarea_checkbox').change( function() {
request_jit_tree_for_node_and_refresh(tm.clickedNode && tm.clickedNode.id || tm.root);
});
window.onpopstate = function(e) {
if (e.state && e.state.id)
request_jit_tree_for_node_and_refresh(e.state.id);
};
}
( run in 0.464 second using v1.01-cache-2.11-cpan-7f9471e7e0a )