-
-
Save brumm/4215014 to your computer and use it in GitHub Desktop.
Munky Imports
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[{ | |
"name": "Munky.Views.ArticleFull", | |
"imports": ["Munky.Views.Category", "Munky.Models.Section", "Munky.Collections.Articles", "Munky.Settings.App", "Munky.Settings.Metrics", "Munky.Support.Time", "Munky.Support.Stocks", "Munky.FinApi"] | |
}, { | |
"name": "Munky.Views.Video", | |
"imports": ["Munky.Views.ArticleFull", "Munky.Settings.Metrics", "Munky.Support.Time"] | |
}, { | |
"name": "Munky.Views.Homepage", | |
"imports": ["Munky.Models.Section", "Munky.Collections.Articles", "Munky.Views.BreakingNews", "Munky.Views.Stock", "Munky.Views.Top", "Munky.Views.Stage", "Munky.Views.Focus", "Munky.Views.Special", "Munky.Views.Category", "Munky.Views.VideoSection", "Munky.Views.PhotoshowSection", "Munky.Views.Spinner", "Munky.Collections.Videos", "Munky.Collections.StockPrices", "Munky.Settings.App", "Munky.Settings.Spinner.Messages.Homepage", "Munky.Support.Browser"] | |
}, { | |
"name": "Munky.Views.Categorypage", | |
"imports": ["Munky.Models.Section", "Munky.Collections.Articles", "Munky.Views.BreakingNews", "Munky.Views.SpecialHeader", "Munky.Views.Category", "Munky.Views.Spinner", "Munky.Settings.App", "Munky.Settings.Spinner.Messages.Categorypage"] | |
}, { | |
"name": "Munky.Views.Category", | |
"imports": ["Munky.Views.Section", "Munky.Views.ArticleTeaser", "Munky.Views.TopTeaser", "Munky.Views.PhotoshowTeaser", "Munky.Transitions.MoreArticles", "Munky.Settings.App", "Munky.Settings.Spinner", "Munky.Helpers"] | |
}, { | |
"name": "Munky.Views.ArticleBase", | |
"imports": ["Munky.Views.ArticleFull", "Munky.Views.Photoshow", "Munky.Views.Video", "Munky.Views.Quiz", "Munky.Views.Error", "Munky.Views.Spinner", "Munky.Views.BreakingNewsTeaser", "Munky.Views.SpecialHeader", "Munky.Views.Categories", "Munky.Views.Footer", "Munky.Support.Time", "Munky.Settings.Spinner.Messages.Article", "Munky.Helpers"] | |
}, { | |
"name": "Munky.Routers.Root", | |
"imports": ["Munky.Collections.Articles", "Munky.Models.Article", "Munky.Models.Section", "Munky.Collections.HomepageSections", "Munky.Views.Navigation", "Munky.Views.Homepage", "Munky.Views.Categorypage", "Munky.Views.ArticleToolbar", "Munky.Views.ArticleBase", "Munky.Views.Categories", "Munky.Views.Footer", "Munky.Views.Interstitial", "Munky.Settings.App", "Munky.ServerSettings", "Munky.UserSettings", "Munky.Helpers"] | |
}, { | |
"name": "Munky.Models.Article", | |
"imports": ["Munky.Settings.App", "Munky.Settings.Metrics", "Munky.Models.Image"] | |
}, { | |
"name": "Munky.Models.Image", | |
"imports": [] | |
}, { | |
"name": "Munky.Models.Section", | |
"imports": ["Munky.Settings.App"] | |
}, { | |
"name": "Munky.Models.Question", | |
"imports": ["Munky.Settings.App", "Munky.Settings.Metrics", "Munky.Models.Image"] | |
}, { | |
"name": "Munky.Models.Quiz", | |
"imports": ["Munky.Settings.App", "Munky.Settings.Metrics", "Munky.Models.Image"] | |
}, { | |
"name": "Munky.Models.StockPrice", | |
"imports": ["Munky.Support.Stocks"] | |
}, { | |
"name": "Munky.Collections.Articles", | |
"imports": ["Munky.Models.Article"] | |
}, { | |
"name": "Munky.Collections.Videos", | |
"imports": ["Munky.Models.Article"] | |
}, { | |
"name": "Munky.Collections.HomepageSections", | |
"imports": ["Munky.Models.Section", "Munky.Collections.Articles", "Munky.Settings.App", "Munky.Helpers"] | |
}, { | |
"name": "Munky.Collections.Questions", | |
"imports": ["Munky.Settings.App", "Munky.Settings.Metrics", "Munky.Models.Image"] | |
}, { | |
"name": "Munky.Collections.StockPrices", | |
"imports": ["Munky.Models.StockPrice"] | |
}, { | |
"name": "Munky.FinApi", | |
"imports": ["Munky.Settings.App"] | |
}, { | |
"name": "Munky.Helpers", | |
"imports": ["Munky.Settings.App", "Munky.ServerSettings"] | |
}, { | |
"name": "Munky.UserSettings", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.VideoSection", | |
"imports": ["Munky.Views.SlideSection", "Munky.Views.VideoTeaser", "Munky.Settings.App"] | |
}, { | |
"name": "Munky.Transitions.MoreArticles", | |
"imports": ["jQuery", "Munky.Transitions.Transition", "Munky.Settings.Spinner"] | |
}, { | |
"name": "Munky.Views.TopTeaser", | |
"imports": ["Munky.Views.ArticleTeaser", "Munky.Settings.Metrics", "Munky.Support.Time"] | |
}, { | |
"name": "Munky.Views.Top", | |
"imports": ["Munky.Views.Section", "Munky.Views.TopTeaser"] | |
}, { | |
"name": "Munky.Views.Stock", | |
"imports": ["Munky.Views.Section", "Munky.Views.StockTeaser"] | |
}, { | |
"name": "Munky.Views.Stage", | |
"imports": ["Munky.Views.Section", "Munky.Views.ArticleTeaser", "Munky.Views.TopStageTeaser", "Munky.Settings.Metrics"] | |
}, { | |
"name": "Munky.Views.Quiz", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.PhotoshowTeaser", | |
"imports": ["Munky.Views.ArticleTeaser", "Munky.Settings.App"] | |
}, { | |
"name": "Munky.Views.PhotoshowSection", | |
"imports": ["Munky.Views.SlideSection", "Munky.Views.PhotoshowsTeaser", "Munky.Settings.App"] | |
}, { | |
"name": "Munky.Views.Photoshow", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.Interstitial", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.Navigation", | |
"imports": ["Munky.Settings.App", "Munky.Tracking"] | |
}, { | |
"name": "Munky.Views.Focus", | |
"imports": ["Munky.Views.SlideSection", "Munky.Views.FocusTeaser", "Munky.Views.PageIndicators"] | |
}, { | |
"name": "Munky.Views.Spinner", | |
"imports": ["Munky.Settings.Spinner", "Munky.Views.CommonErrorView"] | |
}, { | |
"name": "Munky.Views.Error", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.SpecialHeader", | |
"imports": ["Munky.Helpers"] | |
}, { | |
"name": "Munky.Views.Special", | |
"imports": ["Munky.Views.Category", "Munky.Views.ArticleTeaser", "Munky.Views.TopTeaser", "Munky.Views.SpecialHeader", "Munky.Settings.Metrics", "Munky.Helpers"] | |
}, { | |
"name": "Munky.Views.BreakingNewsTeaser", | |
"imports": ["Munky.Views.ArticleTeaser", "Munky.Support.Time"] | |
}, { | |
"name": "Munky.Views.BreakingNews", | |
"imports": ["Munky.Views.Section", "Munky.Views.BreakingNewsTeaser"] | |
}, { | |
"name": "Munky.Views.Section", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.Footer", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.Categories", | |
"imports": ["Munky.Settings.App", "Munky.Tracking"] | |
}, { | |
"name": "Munky.Views.ArticleToolbar", | |
"imports": ["Munky.ArticleTextSizer"] | |
}, { | |
"name": "Munky.Views.ArticleTeaser", | |
"imports": ["Munky.Settings.Metrics"] | |
}, { | |
"name": "Munky.Settings.App", | |
"imports": [] | |
}, { | |
"name": "Munky.Settings.Metrics", | |
"imports": [] | |
}, { | |
"name": "Munky.Settings.Spinner.Messages.Homepage", | |
"imports": [] | |
}, { | |
"name": "Munky.Settings.Spinner.Messages.Categorypage", | |
"imports": [] | |
}, { | |
"name": "Munky.Settings.Spinner.Messages.Article", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.SlideSection", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.FocusTeaser", | |
"imports": ["Munky.Views.ArticleTeaser", "Munky.Support.Time", "Munky.Settings.Metrics"] | |
}, { | |
"name": "Munky.Views.TopStageTeaser", | |
"imports": ["Munky.Views.ArticleTeaser", "Munky.Settings.Metrics"] | |
}, { | |
"name": "Munky.Views.PhotoshowsTeaser", | |
"imports": ["Munky.Views.ArticleTeaser", "Munky.Settings.Metrics"] | |
}, { | |
"name": "Munky.Support.Time", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.PageIndicators", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.CommonErrorView", | |
"imports": [] | |
}, { | |
"name": "Munky.Support.Browser", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.VideoTeaser", | |
"imports": [] | |
}, { | |
"name": "Munky.Views.StockTeaser", | |
"imports": ["Munky.Views.ArticleTeaser"] | |
}, { | |
"name": "Munky.Tracking", | |
"imports": [] | |
}, { | |
"name": "Munky.Transitions.Transition", | |
"imports": ["jQuery"] | |
}, { | |
"name": "jQuery", | |
"imports": [] | |
}, { | |
"name": "Munky.ServerSettings", | |
"imports": [] | |
}, { | |
"name": "Munky.ArticleTextSizer", | |
"imports": ["jQuery", "Munky.UserSettings", "Munky.Tracking"] | |
}, { | |
"name": "Munky.Support.Stocks", | |
"imports": ["Munky.Settings.App"] | |
}] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> | |
<style type="text/css"> | |
body { | |
font: 300 36px "Helvetica Neue"; | |
height: 640px; | |
margin: 80px 160px 80px 160px; | |
overflow: hidden; | |
position: relative; | |
width: 960px; | |
} | |
a:link, a:visited { | |
color: #777; | |
text-decoration: none; | |
} | |
a:hover { | |
color: #666; | |
} | |
blockquote { | |
margin: 0; | |
} | |
blockquote:before { | |
content: "“"; | |
position: absolute; | |
left: -.4em; | |
} | |
blockquote:after { | |
content: "”"; | |
position: absolute; | |
} | |
body > ul { | |
margin: 0; | |
padding: 0; | |
} | |
h1 { | |
font-size: 64px; | |
} | |
h1, h2, h3 { | |
font-weight: inherit; | |
margin: 0; | |
} | |
h2, h3 { | |
text-align: right; | |
font-size: inherit; | |
position: absolute; | |
bottom: 0; | |
right: 0; | |
} | |
h2 { | |
font-size: 24px; | |
position: absolute; | |
} | |
h3 { | |
bottom: -20px; | |
font-size: 18px; | |
} | |
.invert { | |
background: #1f1f1f; | |
color: #dcdccc; | |
} | |
.invert h2, .invert h3 { | |
color: #7f9f7f; | |
} | |
.string, .regexp { | |
color: #f39; | |
} | |
.keyword { | |
color: #00c; | |
} | |
.comment { | |
color: #777; | |
font-style: oblique; | |
} | |
.number { | |
color: #369; | |
} | |
.class, .special { | |
color: #1181B8; | |
} | |
body > svg { | |
position: absolute; | |
top: -80px; | |
left: -160px; | |
} | |
path.arc { | |
cursor: move; | |
fill: #fff; | |
} | |
.node { | |
font-size: 16px; | |
} | |
.node:hover { | |
fill: #1f77b4; | |
} | |
.link { | |
fill: none; | |
stroke: #1f77b4; | |
stroke-opacity: 0.3; | |
pointer-events: none; | |
stroke-width: 2px; | |
stroke-end | |
} | |
.link.source, .link.target { | |
stroke-opacity: 1; | |
stroke-width: 2px; | |
} | |
.node.target { | |
fill: #d62728 !important; | |
} | |
.link.source { | |
stroke: #d62728; | |
} | |
.node.source { | |
fill: #2ca02c; | |
} | |
.link.target { | |
stroke: #2ca02c; | |
} | |
</style> | |
</head> | |
<body> | |
<script type="text/javascript" src="http://d3js.org/d3.v2.js"></script> | |
<script type="text/javascript" src="packages.js"></script> | |
<script type="text/javascript"> | |
var w = 1280, | |
h = 800, | |
rx = w / 2, | |
ry = h / 2, | |
m0, | |
rotate = 0; | |
var splines = []; | |
var cluster = d3.layout.cluster() | |
.size([360, ry - 120]) | |
.sort(function(a, b) { return d3.ascending(a.key, b.key); }); | |
var bundle = d3.layout.bundle(); | |
var line = d3.svg.line.radial() | |
.interpolate("bundle") | |
.tension(.85) | |
.radius(function(d) { return d.y; }) | |
.angle(function(d) { return d.x / 180 * Math.PI; }); | |
// Chrome 15 bug: <http://code.google.com/p/chromium/issues/detail?id=98951> | |
var div = d3.select("body").insert("div", "h2") | |
.style("top", "-80px") | |
.style("left", "-160px") | |
.style("width", w + "px") | |
.style("height", w + "px") | |
.style("position", "absolute"); | |
var svg = div.append("svg:svg") | |
.attr("width", w) | |
.attr("height", w) | |
.append("svg:g") | |
.attr("transform", "translate(" + rx + "," + ry + ")"); | |
svg.append("svg:path") | |
.attr("class", "arc") | |
.attr("d", d3.svg.arc().outerRadius(ry - 120).innerRadius(0).startAngle(0).endAngle(2 * Math.PI)) | |
.on("mousedown", mousedown); | |
d3.json("flare-imports.json", function(classes) { | |
var nodes = cluster.nodes(packages.root(classes)); | |
var links = packages.imports(nodes); | |
// console.log(nodes); | |
// console.log(links); | |
var splines = bundle(links); | |
var path = svg.selectAll("path.link") | |
.data(links) | |
.enter().append("svg:path") | |
.attr("class", function(d) { return "link source-" + d.source.key + " target-" + d.target.key; }) | |
.attr("d", function(d, i) { return line(splines[i]); }); | |
svg.selectAll("g.node") | |
.data(nodes.filter(function(n) { return !n.children; })) | |
.enter().append("svg:g") | |
.attr("class", "node") | |
.attr("id", function(d) { return "node-" + d.key; }) | |
.attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + d.y + ")"; }) | |
.append("svg:text") | |
.attr("dx", function(d) { return d.x < 180 ? 8 : -8; }) | |
.attr("dy", ".31em") | |
.attr("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; }) | |
.attr("transform", function(d) { return d.x < 180 ? null : "rotate(180)"; }) | |
.text(function(d) { return d.key; }) | |
.on("mouseover", mouseover) | |
.on("mouseout", mouseout); | |
}); | |
d3.select(window) | |
.on("mousemove", mousemove) | |
.on("mouseup", mouseup); | |
function mouse(e) { | |
return [e.pageX - rx, e.pageY - ry]; | |
} | |
function mousedown() { | |
m0 = mouse(d3.event); | |
d3.event.preventDefault(); | |
} | |
function mousemove() { | |
if (m0) { | |
var m1 = mouse(d3.event), | |
dm = Math.atan2(cross(m0, m1), dot(m0, m1)) * 180 / Math.PI; | |
div.style("-webkit-transform", "translate3d(0," + (ry - rx) + "px,0)rotate3d(0,0,0," + dm + "deg)translate3d(0," + (rx - ry) + "px,0)"); | |
} | |
} | |
function mouseup() { | |
if (m0) { | |
var m1 = mouse(d3.event), | |
dm = Math.atan2(cross(m0, m1), dot(m0, m1)) * 180 / Math.PI; | |
rotate += dm; | |
if (rotate > 360) rotate -= 360; | |
else if (rotate < 0) rotate += 360; | |
m0 = null; | |
div.style("-webkit-transform", "rotate3d(0,0,0,0deg)"); | |
svg | |
.attr("transform", "translate(" + rx + "," + ry + ")rotate(" + rotate + ")") | |
.selectAll("g.node text") | |
.attr("dx", function(d) { return (d.x + rotate) % 360 < 180 ? 8 : -8; }) | |
.attr("text-anchor", function(d) { return (d.x + rotate) % 360 < 180 ? "start" : "end"; }) | |
.attr("transform", function(d) { return (d.x + rotate) % 360 < 180 ? null : "rotate(180)"; }); | |
} | |
} | |
function mouseover(d) { | |
svg.selectAll("path.link.target-" + d.key) | |
.classed("target", true) | |
.each(updateNodes("source", true)); | |
svg.selectAll("path.link.source-" + d.key) | |
.classed("source", true) | |
.each(updateNodes("target", true)); | |
} | |
function mouseout(d) { | |
svg.selectAll("path.link.source-" + d.key) | |
.classed("source", false) | |
.each(updateNodes("target", false)); | |
svg.selectAll("path.link.target-" + d.key) | |
.classed("target", false) | |
.each(updateNodes("source", false)); | |
} | |
function updateNodes(name, value) { | |
return function(d) { | |
if (value) this.parentNode.appendChild(this); | |
svg.select("#node-" + d[name].key).classed(name, value); | |
}; | |
} | |
function cross(a, b) { | |
return a[0] * b[1] - a[1] * b[0]; | |
} | |
function dot(a, b) { | |
return a[0] * b[0] + a[1] * b[1]; | |
} | |
</script> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function() { | |
packages = { | |
// Lazily construct the package hierarchy from class names. | |
root: function(classes) { | |
var map = {}; | |
function find(name, data) { | |
var node = map[name], i; | |
if (!node) { | |
node = map[name] = data || {name: name, children: []}; | |
if (name.length) { | |
node.parent = find(name.substring(0, i = name.lastIndexOf("."))); | |
node.parent.children.push(node); | |
node.key = name.substring(i + 1); | |
} | |
} | |
return node; | |
} | |
classes.forEach(function(d) { | |
find(d.name, d); | |
}); | |
return map[""]; | |
}, | |
// Return a list of imports for the given array of nodes. | |
imports: function(nodes) { | |
var map = {}, | |
imports = []; | |
// Compute a map from name to node. | |
nodes.forEach(function(d) { | |
map[d.name] = d; | |
}); | |
// For each import, construct a link from the source to target node. | |
nodes.forEach(function(d) { | |
if (d.imports) d.imports.forEach(function(i) { | |
if (typeof map[i] === "undefined") { | |
console.log(i); | |
}; | |
imports.push({ | |
source: map[d.name], target: map[i] | |
}); | |
}); | |
}); | |
return imports; | |
} | |
}; | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment