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 )