Skip to content

Instantly share code, notes, and snippets.

@deoxxa
Forked from rauchg/README.md
Created March 17, 2012 02:47
Show Gist options
  • Save deoxxa/2054542 to your computer and use it in GitHub Desktop.
Save deoxxa/2054542 to your computer and use it in GitHub Desktop.
~/.js/github.com.js

github.com.js

dotjs userscript for visualizing package.json files (if present) underneath the tree view. Now with links to NPM for dependencies!

Very useful for navigating Node.JS projects

$(function () {
var match = $('.tree-browser a:contains(package.json)');
if (match.length) {
$.get(match.attr('href'), function (res) {
var file = $(res).find('#files');
// make it look good
file.css({
marginTop: -15,
marginBottom: 15,
});
// append package.json title
file.find('.info span.icon').append($('<b>package.json</b>').css({
padding: '8px 4px',
display: 'inline-block',
}));
$('.tree-browser-wrapper').after(file);
// try to find the raw URL for package.json so we can get the actual content
var raw = $(file).find('#raw-url');
if (raw && raw.length) {
var url = raw[0].href.toString();
$.get(url, function(data) {
try {
data = JSON.parse(data);
} catch (e) { return; }
var html = file.html(),
modified = false;
var packages = [];
['dependencies', 'devDependencies'].forEach(function(k) {
if (typeof data[k] !== 'object') { return; }
for (var package in data[k]) {
if (typeof package !== 'string') { continue; }
packages.push(package);
}
});
// no packages? no modify!
if (packages.length) {
html = html.replace(new RegExp('(' + packages.join('|') + ')', 'g'), '$1 <a href="http://search.npmjs.org/#/$1">[view on npm]</a>');
modified = true;
}
// if we haven't modified the html, there's no need to re-render it
if (modified) {
file.html(html);
}
});
}
});
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment