User:Yeskarthik/common.js

$(function {

$.getScript("http://en.wikipedia.org/w/index.php?title=User:Yeskarthik/store.js&action=raw&ctype=application/javascript", function(data, text, xhr) {   if (!store.get("trace")){           console.log("first time");           var trace = [];           var state = {                                   "path":location.pathname,                         "host":location.host,                        "parent":null                       };                  var unique_id = 0;           trace.push(state);           store.set("trace", trace);            var url_set = [];           url_set.push(location.pathname);           store.set("url_set", url_set);    }    else if(wgAction === "view") {           console.log("already set");           var url_set = store.get("url_set");           if(url_set.indexOf(location.pathname) === -1) {                          var trace = store.get("trace");               store.set("unique_id", unique_id) var reg = /.+?\:\/\/.+?(\/.+?)(?:#|\?|$)/; var current_state = { "path":location.pathname, "host":location.host, "parent":reg.exec(document.referrer)[1] };              trace.push(current_state); store.set("trace", trace); url_set.push(location.pathname); store.set("url_set",url_set); }   }    $("#content").append(' Click here to view visualisation  '); $("#content").append(' ');

function put_children(cur_child) { cur_child.children = new Array; $.each(temp, function(i, val)        {               if(val.parent === cur_child.path) {	            cur_child.children.push(val);		    }	}); $.each(cur_child.children, function(i ,val) {		put_children(cur_child.children[i]);	}); }   $("#open_wikitreebox").click(function(e) {        e.preventDefault;        temp = store.get("trace");        trace = store.get("trace");        var cur_children = null;        result = {};         $.each(temp, function(i, val) { if(val.parent === null){ result.path = val.path; result.host = val.host; result.children = new Array; $.each(trace, function(j, value) {                if(val.path === value.parent) {                     result.children.push(value);                 }             } ); cur_children = result.children; $.each(cur_children, function(k, data) {                    put_children(cur_children[k]);            }); return false; }       });    $.getScript("http://mbostock.github.com/d3/talk/20111018/d3/d3.js")      .done(function(text, data, xhr) { $.getScript("http://mbostock.github.com/d3/talk/20111018/d3/d3.layout.js").done(function(text, data, xhr) {          $.getJSON("https://api-ssl.b"+"itly.com/v3/shorten?access_token=e7c78fd891fe9aa0b141bbf9c9a91242b597cd16&longUrl=http://chennaigeeks.in/wikitree?treestring="+encodeURIComponent(JSON.stringify(result)), function(data){ $("#url_holder").html(""+data.data.url+""); });           buildGraph;        	        $("#wikitreebox").show;            }); });   });     $("#close_wikitreebox").click(function(e){	e.preventDefault;	$("#wikitreebox").hide;    }); }); });

function buildGraph {

// Thanks to mobstock on github.com/mobstock/d3 var m = [20, 120, 20, 120], w = 800 - m[1] - m[3], h = 600 - m[0] - m[2], i = 0, root;

var tree = d3.layout.tree .size([h, w]);

var diagonal = d3.svg.diagonal .projection(function(d) { return [d.y, d.x]; });

var vis = d3.select("#wikitreebox").append("svg:svg") .attr("width", w + m[1] + m[3]) .attr("height", h + m[0] + m[2]) .append("svg:g") .attr("transform", "translate(" + m[3] + "," + m[0] + ")");

//d3.json("tree.json", function(json) { json = result;  root = json;  root.x0 = h / 2;  root.y0 = 0;

function toggleAll(d) { if (d.children.length!=0) { d.children.forEach(toggleAll); //toggle(d); } }  // Initialize the display to show a few nodes. root.children.forEach(toggleAll); update(root);

//});

function update(source) { var duration = d3.event && d3.event.altKey ? 5000 : 500;

// Compute the new tree layout. var nodes = tree.nodes(root).reverse;

// Normalize for fixed-depth. nodes.forEach(function(d) { d.y = d.depth * 180; });

// Update the nodes. var node = vis.selectAll("g.node") .data(nodes, function(d) { return d.id || (d.id = ++i); });

// Enter any new nodes at the parent's previous position. var nodeEnter = node.enter.append("svg:g") .attr("class", "node") .attr("transform", function(d) { return "translate(" + source.y0 + "," + source.x0 + ")"; }) .on("click", function(d) { toggle(d); update(d); });

nodeEnter.append("svg:circle") .attr("r", 1e-6) .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; });

nodeEnter.append("svg:text") .attr("x", function(d) { return d.children || d._children ? -10 : 10; }) .attr("dy", ".35em") .attr("text-anchor", function(d) { return d.children || d._children ? "end" : "start"; }) .text(function(d) { return d.path; }) .style("fill-opacity", 1e-6);

// Transition nodes to their new position. var nodeUpdate = node.transition .duration(duration) .attr("transform", function(d) { return "translate(" + d.y + "," + d.x + ")"; });

nodeUpdate.select("circle") .attr("r", 4.5) .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; });

nodeUpdate.select("text") .style("fill-opacity", 1);

// Transition exiting nodes to the parent's new position. var nodeExit = node.exit.transition .duration(duration) .attr("transform", function(d) { return "translate(" + source.y + "," + source.x + ")"; }) .remove;

nodeExit.select("circle") .attr("r", 1e-6);

nodeExit.select("text") .style("fill-opacity", 1e-6);

// Update the links. var link = vis.selectAll("path.link") .data(tree.links(nodes), function(d) { return d.target.id; });

// Enter any new links at the parent's previous position. link.enter.insert("svg:path", "g") .attr("class", "link") .attr("d", function(d) {       var o = {x: source.x0, y: source.y0};        return diagonal({source: o, target: o});      }) .transition .duration(duration) .attr("d", diagonal);

// Transition links to their new position. link.transition .duration(duration) .attr("d", diagonal);

// Transition exiting nodes to the parent's new position. link.exit.transition .duration(duration) .attr("d", function(d) {       var o = {x: source.x, y: source.y};        return diagonal({source: o, target: o});      }) .remove;

// Stash the old positions for transition. nodes.forEach(function(d) {   d.x0 = d.x;    d.y0 = d.y;  }); }

// Toggle children. function toggle(d) { if (d.children) { d._children = d.children; d.children = null; } else { d.children = d._children; d._children = null; } }

}