[
  {
    "path": "README.markdown",
    "content": "# [GitHub Résumé](https://resume.github.io/)\n\n**A service that creates a résumé based on your GitHub repos/activity.**\n\nGitHub Résumé is **opt-in**. To make your resume visible, just **star** [this project](https://github.com/resume/resume.github.com). To view your résumé, go to `https://resume.github.io/?yourusername` or follow the instructions on the [home page](https://resume.github.io/).\n\nGreat for all the tech-savy bosses who want to have a **quick view** of person's git/github activity, _before the interview_.\n\n### Development\n\nTo run the app in development mode:\n\n    $ rackup config.ru\n\n(You must have Ruby and the rack gem installed.)\n"
  },
  {
    "path": "config.ru",
    "content": "use Rack::Static, :urls => [\"/css\", \"/images\", \"/js\", \"/views\"], :root => \".\"\nrun lambda { |env| [200, { 'Content-Type' => 'text/html' }, File.open('index.html', File::RDONLY)] }\n"
  },
  {
    "path": "css/print.css",
    "content": "/*\n    Print stylesheet for résumés\n*/\n\n\n/* =! Template */\n\n#doc2 {\n    width: 100%;\n}\n#inner {\n    margin: 0 auto;\n    padding: 10pt;\n    border: 0;\n}\nheader {\n    margin-top: 0;\n}\n\n.enlarge {\n    padding-right: 0;\n}\n\n.talent li {\n    border: 0;\n}\n\n.org p,\n.job p {\n    margin: 5pt 0 15pt;\n}\n\n#repositories {\n    padding-bottom: 0;\n}\n\n#jobs h4 {\n    margin-top: 10pt;\n}\n\n#jobs .job,\n#about {\n    page-break-inside: avoid;\n}\n\narticle,\n#about {\n    margin-bottom: 0;\n}\n\nfooter {\n    padding: 5pt 0;\n}\n\n/* --------- */\n\n\n\n/* =! Font */\n\nbody {\n    font-size: 10pt;\n}\n\nheader h1 {\n    font-size: 28pt;\n}\nheader h2 {\n    font-size: 14pt;\n}\n\narticle h2,\n#profile .enlarge,\n#about .enlarge {\n    font-size: 12pt;\n}\n\n/* --------- */\n\n\n\n/* =! Colors */\n\nbody,\nh1, h2, h3, h4 {\n    color: #000;\n}\n\n#inner {\n    background: #fff;\n}\n\n/* --------- */\n\n\n\n/* =! Links */\n\n#profile a:after,\n#repositories a:after,\n#about a:after {\n    content: \" (\" attr(href) \")\";\n    font-style: italic;\n    font-size: 10pt;\n}\n#profile #myblog:after,\n#jobs p a:after {\n    content: none;\n}\n\na {\n    text-decoration: none;\n}\n\n#mylanguages a,\n#jobs p a {\n    color: inherit;\n}\n\n#actions {\n    visibility: hidden;\n}\n\n/* --------- */\n"
  },
  {
    "path": "css/resume.css",
    "content": "/*\r\n---------------------------------------------------------------------------------\r\n    STRIPPED DOWN RESUME TEMPLATE\r\n    html resume\r\n\r\n    v0.9: 5/28/09\r\n\r\n    design and code by: thingsthatarebrown.com\r\n                        (matt brown)\r\n---------------------------------------------------------------------------------\r\n*/\r\n\r\n.msg {\r\n  padding: 10px;\r\n  background: #222;\r\n  position: relative;\r\n}\r\n\r\n.msg h1 {  color: #fff }\r\n\r\n.msg a {\r\n  margin-left: 20px;\r\n  background: #408814;\r\n  color: white;\r\n  padding: 4px 8px;\r\n  text-decoration: none;\r\n}\r\n\r\n.msg a:hover {  background: #266400 }\r\n\r\nhtml {\r\n  height: 100% ! important;\r\n  background: url('../images/low_contrast_linen.png');\r\n}\r\n\r\n/* //-- yui-grids style overrides -- */\r\n\r\nbody {\r\n  font-family: Georgia, Garamond, \"Times New Roman\", Times, serif;\r\n  color: #444;\r\n}\r\n\r\n.yui-gf {\r\n  margin-bottom: 2em;\r\n  padding-bottom: 2em;\r\n  border-bottom: 1px solid #ccc;\r\n}\r\n\r\n.yui-gf div.first {  width: 12.3% }\r\n\r\n.yui-gf .yui-u {  width: 80.2% }\r\n\r\n/* //-- header, body, footer -- */\r\n\r\nheader {\r\n  margin: 2.5em 0 3em 0;\r\n  padding-bottom: 1.5em;\r\n  border-bottom: 1px solid #ccc;\r\n}\r\n\r\nheader h1 {\r\n  font-size: 48px;\r\n  text-transform: uppercase;\r\n  letter-spacing: 3px;\r\n}\r\n\r\nheader h2 {\r\n  text-transform: uppercase;\r\n  letter-spacing: 2px;\r\n}\r\n\r\narticle,\r\nfooter {  margin-bottom: 2em }\r\n\r\nfooter p {\r\n  margin-bottom: 0;\r\n  text-align: center;\r\n}\r\n\r\n/* //-- footer -- */\r\n\r\nfooter {\r\n  padding: 1em 0 5em 0;\r\n  font-size: 92%;\r\n  border-top: 1px solid #ccc;\r\n  text-align: center;\r\n}\r\n\r\n/* //-- core typography and style -- */\r\n\r\nh2 {  font-size: 152% }\r\n\r\nh3,\r\nh4 {  font-size: 122% }\r\n\r\nh1,\r\nh2,\r\nh3,\r\nh4 {  color: #333 }\r\n\r\np {\r\n  font-size: 100%;\r\n  line-height: 18px;\r\n}\r\n\r\na {  color: #990003 }\r\n\r\na:hover {  text-decoration: none }\r\n\r\nstrong {  font-weight: bold }\r\n\r\nli {\r\n  line-height: 24px;\r\n  border-bottom: 1px solid #ccc;\r\n}\r\n\r\np.enlarge {\r\n  font-size: 144%;\r\n  line-height: 24px;\r\n}\r\n\r\n.contact-info {\r\n  margin-top: 7px;\r\n  text-align: right;\r\n  font-size: 12px;\r\n  position: relative;\r\n  float: left;\r\n  width: 100%;\r\n}\r\n\r\n.contact-info img {\r\n  float: right;\r\n  border: 1px solid #ccc;\r\n  width: 140px;\r\n  height: 140px;\r\n  margin: -24px 0 14px;\r\n  border-radius: 3px;\r\n}\r\n\r\n.contact-info a {\r\n  position : relative;\r\n  float: left;\r\n  width: 100%;\r\n}\r\n\r\n.first h2 {  font-style: italic }\r\n\r\n.last {  border-bottom: 0 }\r\n\r\n/* //-- section styles -- */\r\n\r\n#pdf {\r\n  display: block;\r\n  float: left;\r\n  background: #666;\r\n  color: #fff;\r\n  padding: 6px 50px 6px 12px;\r\n  margin-bottom: 6px;\r\n  text-decoration: none;\r\n}\r\n\r\n#pdf:hover {  background: #222 }\r\n\r\n.org,\r\n.job {\r\n  position: relative;\r\n  margin-bottom: 1em;\r\n  padding-bottom: 1em;\r\n  border-bottom: 1px solid #ccc;\r\n}\r\n\r\n.org h3,\r\n.job h3 {\r\n  font-size: 100%;\r\n}\r\n\r\n.org h4,\r\n.job h4 {\r\n  position: absolute;\r\n  top: 0.35em;\r\n  right: 0;\r\n}\r\n\r\n.org a,\r\n.job a {\r\n  border: none;\r\n  text-decoration: none;\r\n}\r\n\r\n.org p,\r\n.job p {\r\n  margin: 0.75em 0 3em 0;\r\n  font-size: 122%;\r\n}\r\n\r\n.last {  border: none }\r\n\r\n.talent {\r\n  width: 32%;\r\n  float: left;\r\n}\r\n\r\n.talent h2 {  margin-bottom: 6px }\r\n\r\n#srt-ttab {\r\n  margin-bottom: 100px;\r\n  text-align: center;\r\n}\r\n\r\n#srt-ttab img.last {  margin-top: 20px }\r\n\r\n/* --// override to force 1/8th width grids -- */\r\n\r\n#username {\r\n  position: relative;\r\n  float: left;\r\n  height: 30px;\r\n  width: 75%;\r\n  border: 2px solid #444;\r\n  -webkit-border-radius: 4px;\r\n  -moz-border-radius: 4px;\r\n  border-radius: 4px;\r\n  font-family: Georgia, Garamond, \"Times New Roman\", Times, serif;\r\n  color: #444;\r\n  font-size: 18px;\r\n  padding: 5px;\r\n}\r\n\r\n#gen {\r\n  position: relative;\r\n  float: left;\r\n  margin-left: 10px;\r\n  width: 20%;\r\n  height: 44px;\r\n  font-family: Georgia, Garamond, \"Times New Roman\", Times, serif;\r\n  font-size: 18px;\r\n  color: #fff;\r\n  background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0.21, rgb(31,31,31)), color-stop(0.61, rgb(51,51,51)) );\r\n  background-image: -moz-linear-gradient( center bottom, rgb(31,31,31) 21%, rgb(51,51,51) 61% );\r\n  border: 1px solid #444;\r\n  -webkit-border-radius: 4px;\r\n  -moz-border-radius: 4px;\r\n  border-radius: 4px;\r\n}\r\n\r\n#gen:hover {  cursor: pointer }\r\n\r\n.yui-gb {\r\n  margin-top: 10px;\r\n  margin-bottom: 10px;\r\n  padding-bottom: 10px;\r\n}\r\n\r\n.enlarge-medium {  font-size: 15px }\r\n\r\n.yui-gb ul {  width: 80% }\r\n\r\nnoscript {\r\n  display: block;\r\n  margin-top: 30px;\r\n  font-size: 152%;\r\n  color: #990003;\r\n}\r\n\r\n#actions {\r\n  padding: 30px 0 40px 0;\r\n  margin: 0 auto 0 auto;\r\n  width: 73.076em;\r\n}\r\n\r\n#actions a {\r\n  color: #ccc;\r\n  text-decoration: none;\r\n  text-shadow: 0 0 5px #000;\r\n  margin-left: 1em;\r\n}\r\n\r\n#actions * {  float: right }\r\n\r\n#doc {\r\n  margin-top: 70px;\r\n  background: #f5f5f5;\r\n  padding: 25px 107px 0px 107px;\r\n}\r\n\r\n#doc2 {  padding-bottom: 70px }\r\n\r\n.contributions {\r\n  padding-bottom: 10px;\r\n}\r\n\r\n@media screen and (max-width: 59.9em) {\r\n  #inner {\r\n    padding: 5 5 5 5;\r\n    margin: 0 auto;\r\n    background: #f5f5f5;\r\n    border: solid #666;\r\n    border-width: 8px 0 2px 0;\r\n    box-shadow: 0 1px 3px #000;\r\n  }\r\n  header h1 {\r\n    font-size: 2.2em;\r\n    font-weight: bold;\r\n    text-transform: uppercase;\r\n    letter-spacing: 0.2em;\r\n  }\r\n\r\n  header h2 {\r\n    font-size: 1.5em;\r\n    text-transform: uppercase;\r\n    letter-spacing: 0.2em;\r\n  }\r\n\r\n  #doc2 {\r\n    width: 100%;\r\n    padding-bottom: 1em;\r\n  }\r\n  #actions{\r\n    display: none;\r\n  }\r\n\r\n  h1{\r\n    font-size: 2em;\r\n  }\r\n  h2{\r\n    font-size: 1.5em;\r\n  }\r\n  p.enlarge {\r\n    font-size: 1.4em;\r\n    line-height: 1.2em;\r\n  }\r\n  li {\r\n    line-height: 1.6em;\r\n  }\r\n  h3, h4{\r\n    font-size: 1.3em;\r\n  }\r\n  p{\r\n    font-size: 1.2em;\r\n    line-height: 1.1em;\r\n  }\r\n  .org p, .job p {\r\n    margin: 0.75em 0 1.5em 0;\r\n  }\r\n  .first h2, .first h1{\r\n    padding-left: 0.5em;\r\n  }\r\n\r\n  .yui-gf div.first {\r\n    width: 20%;\r\n  }\r\n\r\n  .yui-gf .yui-u {  width: 80% }\r\n\r\n}\r\n\r\n@media screen and (min-width: 60em) {\r\n  #inner {\r\n    padding: 10px 80px;\r\n    margin: 0 auto;\r\n    background: #f5f5f5;\r\n    border: solid #666;\r\n    border-width: 8px 0 2px 0;\r\n    box-shadow: 0 1px 3px #000;\r\n  }\r\n}\r\n"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <title>GitHub R&eacute;sum&eacute;</title>\n  <meta charset=\"utf-8\" />\n  <!--[if IE]>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.0/html5shiv.min.js\"></script>\n  <![endif]-->\n  <meta name=\"keywords\" content=\"cv, resume, hResume, github, community, free, fun, nice, useful\" />\n  <meta name=\"description\" content=\"GitHub resumes, generated by the community, for the community.\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"https://cdnjs.cloudflare.com/ajax/libs/yui/2.7.0/reset-fonts-grids/reset-fonts-grids.css\" media=\"all\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"css/resume.css\" media=\"all\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"css/print.css\" media=\"print\" />\n  <script type=\"text/javascript\" src=\"https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js\"></script>\n  <script>window.jQuery || document.write('<script src=\"js/vendor/jquery-2.1.4.min.js\"><\\/script>')</script>\n  <script type=\"text/javascript\" src=\"https://cdnjs.cloudflare.com/ajax/libs/mustache.js/0.3.0/mustache.min.js\"></script>\n  <script type=\"text/javascript\" src=\"js/githubresume.js\"></script>\n\n  <link rel=\"icon\" type=\"image/png\" href=\"images/favicon.png\">\n</head>\n<body id=\"resume\">\n  <noscript>You need to enable Javascript to generate and see r&eacute;sum&eacute; pages.</noscript>\n</body>\n</html>\n"
  },
  {
    "path": "js/githubresume.js",
    "content": "var urlParams = {};\nvar username;\nvar trackerId = 'UA-21222559-1';\n\n(function () {\n    var e,\n        a = /\\+/g,  // Regex for replacing addition symbol with a space\n        r = /([^&=]+)=?([^&]*)/g,\n        d = function (s) { return decodeURIComponent(s.replace(a, \" \")); },\n        q = window.location.search.substring(1);\n\n    while (e = r.exec(q)) {\n       urlParams[0] = d(e[1]);\n    }\n})();\n\n$(document).ready(function() {\n    try {\n        if (urlParams[0] !== undefined) {\n            username = urlParams[0];\n            run();\n        } else {\n            home();\n        }\n    } catch (err) {\n        try {\n            console.log(err);\n        } catch (e) {\n            /*fail silently*/\n        }\n    }\n});\n\nvar error = function() {\n    $.ajax({\n        url: 'views/error.html',\n        dataType: 'html',\n        success: function(data) {\n            var template = data;\n            $('#resume').html(data);\n        }\n    });\n};\n\nvar home = function() {\n    $.ajax({\n        url: 'views/index.html',\n        dataType: 'html',\n        success: function(data) {\n            var template = data;\n            $('#resume').html(data);\n        }\n    });\n};\n\nvar github_user = function(username, callback) {\n    $.getJSON('https://api.github.com/users/' + username + '?callback=?', callback);\n}\n\nvar github_user_repos = function(username, callback, page_number, prev_data) {\n    var page = (page_number ? page_number : 1),\n        url = 'https://api.github.com/users/' + username + '/repos?per_page=100&callback=?',\n        data = (prev_data ? prev_data : []);\n\n    if (page_number > 1) {\n        url += '&page=' + page_number;\n    }\n    $.getJSON(url, function(repos) {\n        data = data.concat(repos.data);\n        if (repos.data.length == 100) {\n            github_user_repos(username, callback, page + 1, data);\n        } else {\n            callback(data);\n        }\n    });\n}\n\nvar github_user_issues = function(username, callback, page_number, prev_data) {\n    var page = (page_number ? page_number : 1),\n        url = 'https://api.github.com/search/issues?q=type:pr+is:merged+author:' + username + '&per_page=100&callback=?'\n        data = (prev_data ? prev_data : []);\n\n    if (page_number > 1) {\n        url += '&page=' + page_number;\n    }\n\n    $.getJSON(url, function(repos) {\n        data = data.concat(repos.data.items);\n        if (repos.data.total_count == 100) {\n            github_user_issues(username, callback, page + 1, data);\n        } else {\n            callback(data);\n        }\n    });\n}\n\nvar github_user_orgs = function(username, callback) {\n    $.getJSON('https://api.github.com/users/' + username + '/orgs?callback=?', callback);\n}\n\n// Check to see if the user has starred the resume.github.com repo.\n//\n// Returns true/false.\nvar github_user_starred_resume = function(username, page) {\n    var star  = false;\n    var repos = [];\n    var page  = (page ? page : 1);\n    var url   = 'https://api.github.com/users/' + username + '/starred?per_page=100&page=' + page;\n    var errorMsg;\n\n    $.ajax({\n        url: url,\n        async: false,\n        dataType: 'json',\n        success: function(data) {\n            repos = data;\n        },\n        error: function(e) {\n            if (e.status == 403) {\n                errorMsg = 'api_limit'\n            } else if (e.status == 404) {\n                errorMsg = 'not_found'\n            }\n        }\n    });\n\n    if (errorMsg === 'api_limit' || errorMsg === 'not_found') {\n        return errorMsg;\n    }\n\n    $.each(repos, function(i, repo) {\n        if (repo.full_name == \"resume/resume.github.com\") {\n            star = true;\n            return false; // stop iterating\n        }\n    });\n\n    if (star) {\n        return star;\n    }\n\n    if (repos.length == 100) {\n        star = github_user_starred_resume(username, page + 1);\n    }\n\n    return star;\n}\n\nvar run = function() {\n    var itemCount = 0,\n        maxItems = 5,\n        maxLanguages = 9,\n        starred = github_user_starred_resume(username);\n\n    if (!starred || starred === 'api_limit' || starred === 'not_found') {\n        if (starred === 'api_limit') {\n            $.ajax({\n                url: 'views/api_limit.html',\n                dataType: 'html',\n                success: function(data) {\n                    var template = data;\n                    $('#resume').html(data);\n                }\n            });\n        } else if (starred === 'not_found') {\n            $.ajax({\n                url: 'views/not_found.html',\n                dataType: 'html',\n                success: function(data) {\n                    var template = data;\n                    $('#resume').html(data);\n                }\n            });\n        } else {\n            $.ajax({\n                url: 'views/opt_out.html',\n                dataType: 'html',\n                success: function(data) {\n                    var template = data;\n                    $('#resume').html(data);\n                }\n            });\n        }\n        return;\n    }\n\n    var res = github_user(username, function(data) {\n        data = data.data;\n        var sinceDate = new Date(data.created_at);\n        var sinceMonth = sinceDate.getMonth();\n        var since = sinceDate.getFullYear();\n        var sinceMonth = sinceDate.getMonth();\n        var currentYear = (new Date).getFullYear();\n        switch (since) {\n          case currentYear-1:\n            since = 'last year';\n            break;\n          case currentYear:\n            since = 'this year';\n            break;\n        }\n\n        var addHttp = '';\n        if (data.blog && data.blog.indexOf('http') < 0) {\n            addHttp = 'http://';\n        }\n\n        // set view.name to the \"friendly\" name e.g. \"John Doe\". If not defined\n        // (in which case data.name is empty), fall back to the login\n        // name e.g. \"johndoe\"\n        var name = username;\n        if (data.name !== null && data.name !== undefined && data.name.length) {\n            name = data.name;\n        }\n\n        var avatar = '';\n        if (data.type == 'Organization'){\n            avatar = data.avatar_url.match(/https:\\/\\/secure.gravatar.com\\/avatar\\/[0-9a-z]+/)[0];\n            avatar += '?s=140&amp;d=https://github.com/images/gravatars/gravatar-140.png';\n        }\n\n        var view = {\n            name: name,\n            type: data.type,\n            email: data.email,\n            created_at: data.created_at,\n            earlyAdopter: 0,\n            location: data.location,\n            gravatar_id: data.gravatar_id,\n            avatar_url: avatar,\n            repos: data.public_repos,\n            reposLabel: data.public_repos > 1 ? 'repositories' : 'repository',\n            followers: data.followers,\n            followersLabel: data.followers > 1 ? 'followers' : 'follower',\n            username: username,\n            userStatus: 'GitHub user',\n            since: since,\n            resume_url: window.location\n        };\n\n        // We consider a limit of 4 months since the GitHub opening (Feb 2008) to be considered as an early adopter\n        if ((since == '2008' && sinceMonth <= 5) || since <= '2007') {\n            view.earlyAdopter = 1;\n        }\n\n        view.userStatus = getUserStatus();\n        function getUserStatus() {\n            var COEF_REPOS = 2;\n            var COEF_GISTS = 0.25;\n            var COEF_FOLLOWERS = 0.5;\n            var COEF_FOLLOWING = 0.25;\n            var FIRST_STEP = 0;\n            var SECOND_STEP = 5;\n            var THIRD_STEP = 20;\n            var FOURTH_STEP = 50;\n            var FIFTH_STEP = 150;\n            var EXTRA_POINT_GAIN = 1;\n\n            var statusScore = data.public_repos * COEF_REPOS\n                            + data.public_gists * COEF_GISTS\n                            + data.followers * COEF_FOLLOWERS\n                            + data.following * COEF_FOLLOWING;\n\n            // Extra points\n            // - Early adopter\n            if (view.earlyAdopter == 1) {\n                statusScore += EXTRA_POINT_GAIN;\n            }\n            // - Blog & Email & Location\n            if (view.location && view.location != '' && view.email && view.email != '' && data.blog && data.blog != '') {\n              statusScore += EXTRA_POINT_GAIN;\n            }\n\n            if (statusScore == FIRST_STEP) {\n              return 'Inactive GitHub user';\n            }\n            else if (statusScore > FIRST_STEP && statusScore <= SECOND_STEP) {\n              return 'Newbie GitHub user';\n            }\n            else if (statusScore > SECOND_STEP && statusScore <= THIRD_STEP) {\n              return 'Regular GitHub user';\n            }\n            else if (statusScore > THIRD_STEP && statusScore <= FOURTH_STEP) {\n              return 'Advanced GitHub user';\n            }\n            else if (statusScore > FOURTH_STEP && statusScore <= FIFTH_STEP) {\n              return 'Enthusiastic GitHub user';\n            }\n            else if (statusScore > FIFTH_STEP) {\n              return 'Passionate GitHub user';\n            }\n        };\n\n        if (data.blog !== undefined && data.blog !== null && data.blog !== '') {\n            view.website = addHttp + data.blog;\n        }\n\n        var resume = (data.type == 'User' ? 'views/resume.html' : 'views/resumeOrgs.html');\n        $.ajax({\n            url: resume,\n            dataType: 'html',\n            success: function(data) {\n                var template = data,\n                    html = Mustache.to_html(template, view);\n                $('#resume').html(html);\n                document.title = name + \"'s Résumé\";\n                $(\"#actions #print\").click(function(){\n                    window.print();\n                    return false;\n                });\n            }\n        });\n    });\n\n    github_user_repos(username, function(data) {\n        var sorted = [],\n            languages = {},\n            popularity;\n\n        $.each(data, function(i, repo) {\n            if (repo.fork !== false) {\n                return;\n            }\n\n            if (repo.language) {\n                if (repo.language in languages) {\n                    languages[repo.language]++;\n                } else {\n                    languages[repo.language] = 1;\n                }\n            }\n\n            popularity = repo.watchers + repo.forks;\n            sorted.push({position: i, popularity: popularity, info: repo});\n        });\n\n        function sortByPopularity(a, b) {\n            return b.popularity - a.popularity;\n        };\n\n        sorted.sort(sortByPopularity);\n\n        var languageTotal = 0;\n        function sortLanguages(languages, limit) {\n            var sorted_languages = [];\n\n            for (var lang in languages) {\n                if (typeof(lang) !== \"string\") {\n                    continue;\n                }\n                sorted_languages.push({\n                    name: lang,\n                    popularity: languages[lang],\n                    toString: function() {\n                        return '<a href=\"https://github.com/search?q=user%3A'\n                            + username + '&l=' + encodeURIComponent(this.name) + '\">'\n                            + this.name + '</a>';\n                    }\n                });\n\n                languageTotal += languages[lang];\n            }\n\n            if (limit) {\n                sorted_languages = sorted_languages.slice(0, limit);\n            }\n\n            return sorted_languages.sort(sortByPopularity);\n        }\n\n        $.ajax({\n            url: 'views/job.html',\n            dataType: 'html',\n            success: function(response) {\n                languages = sortLanguages(languages, maxLanguages);\n\n                if (languages && languages.length > 0) {\n                    var ul = $('<ul class=\"talent\"></ul>'),\n                        percent, li;\n\n                    $.each(languages, function(i, lang) {\n                        x = i + 1;\n                        percent = parseInt((lang.popularity / languageTotal) * 100);\n                        li = $('<li>' + lang.toString() + ' ('+percent+'%)</li>');\n\n                        if (x % 3 == 0 || (languages.length < 3 && i == languages.length - 1)) {\n                            li.attr('class', 'last');\n                            ul.append(li);\n                            $('#content-languages').append(ul);\n                            ul = $('<ul class=\"talent\"></ul>');\n                        } else {\n                            ul.append(li);\n                            $('#content-languages').append(ul);\n                        }\n                    });\n                } else {\n                    $('#mylanguages').hide();\n                }\n\n                if (sorted.length > 0) {\n                    $('#jobs').html('');\n                    itemCount = 0;\n                    var since, until, date, view, template, html;\n\n                    $.each(sorted, function(index, repo) {\n                        if (itemCount >= maxItems) {\n                            return;\n                        }\n\n                        since = new Date(repo.info.created_at);\n                        since = since.getFullYear();\n                        until = new Date(repo.info.pushed_at);\n                        until = until.getFullYear();\n                        if (since == until) {\n                            date = since;\n                        } else {\n                            date = since + ' &ndash; ' + until;\n                        }\n                        var emojiPattern = /:([a-z0-9_\\+\\-]+):/g;\n                        // no, it's not really a pattern\n                        var imagePattern = \"<img width='20' height='20' src='https://assets-cdn.github.com/images/icons/emoji/$1.png' />\";\n                        var description = repo.info.description;\n                        repo.info.description = description ? description.replace(emojiPattern, imagePattern) : description;\n                        view = {\n                            name: repo.info.name,\n                            date: date,\n                            language: repo.info.language,\n                            description: repo.info.description,\n                            homepage: repo.info.homepage,\n                            username: username,\n                            watchers: repo.info.watchers,\n                            forks: repo.info.forks,\n                            watchersLabel: repo.info.watchers == 0 || repo.info.watchers > 1 ? 'stars' : 'star',\n                            forksLabel: repo.info.forks == 0 || repo.info.forks > 1 ? 'forks' : 'fork',\n                        };\n\n                        if (itemCount == sorted.length - 1 || itemCount == maxItems - 1) {\n                            view.last = 'last';\n                        }\n\n                        template = response;\n                        html = Mustache.to_html(template, view);\n\n                        $('#jobs').append($(html));\n                        ++itemCount;\n                    });\n                } else {\n                    if(data.length > 0){\n                      $('#jobs').html('').append('<p class=\"enlarge\">All of this user\\'s repositories seem to be forks. Sorry.</p>');\n                    } else {\n                      $('#jobs').html('').append('<p class=\"enlarge\">Unfortunately, this user does not seem to have any <strong>public</strong> repositories.</p>');\n                    }\n                }\n            }\n        });\n    });\n\n    github_user_issues(username, function(data) {\n        var sorted = [],\n            repos = {};\n\n        $.each(data, function(i, issue) {\n            if(repos[issue.repository_url] === undefined) {\n                repos[issue.repository_url] = { popularity: 1 }\n            } else {\n                repos[issue.repository_url].popularity += 1;\n            }\n        });\n\n        $.each(repos, function(repo, obj) {\n            sorted.push({ repo: repo, popularity: obj.popularity});\n        })\n\n        function sortByPopularity(a, b) {\n            return b.popularity - a.popularity;\n        };\n\n        sorted.sort(sortByPopularity);\n\n        $.ajax({\n            url: 'views/contrib.html',\n            dataType: 'html',\n            success: function(response) {\n                if (sorted.length > 0) {\n                    $('#contrib-jobs').html('');\n                    var view, template, html, repoUrl, repoName, commitsUrl;\n                    $.each(sorted, function(index, repo) {\n                        repoUrl = repo.repo.replace(/https:\\/\\/api\\.github\\.com\\/repos/, 'https://github.com');\n                        repoName = repo.repo.replace(/https:\\/\\/api\\.github\\.com\\/repos\\//, '');\n                        commitsUrl = repoUrl + '/commits?author=' + username;\n                        view = {\n                            count: repo.popularity,\n                            username: username,\n                            repoUrl: repoUrl,\n                            repoName: repoName,\n                            commitsUrl: commitsUrl\n                        };\n\n                        template = response;\n                        html = Mustache.to_html(template, view);\n\n                        $('#contrib-jobs').append($(html));\n                    });\n                } else {\n                    $('#contributions').remove();\n                }\n            }\n        });\n    });\n\n    github_user_orgs(username, function(response) {\n        var sorted = [];\n\n        $.each(response.data, function(i, org) {\n            if (org.login === undefined) {\n                return;\n            }\n            sorted.push({position: i, info: org});\n        });\n\n        $.ajax({\n            url: 'views/org.html',\n            dataType: 'html',\n            success: function(response) {\n                var now = new Date().getFullYear();\n\n                if (sorted.length > 0) {\n                    $('#orgs').html('');\n\n                    var name, view, template, html;\n\n                    $.each(sorted, function(index, org) {\n                        if (itemCount >= maxItems) {\n                            return;\n                        }\n                        name = (org.info.name || org.info.login);\n                        view = {\n                            name: name,\n                            now: now\n                        };\n\n                        if (itemCount == sorted.length - 1 || itemCount == maxItems) {\n                            view.last = 'last';\n                        }\n                        template = response;\n                        html = Mustache.to_html(template, view);\n\n                        $('#orgs').append($(html));\n                        ++itemCount;\n                    });\n                } else {\n                    $('#organizations').remove();\n                }\n            }\n        });\n    });\n\n};\n\nif (trackerId) {\n  var _gaq = _gaq || [];\n  _gaq.push(['_setAccount', trackerId]);\n  _gaq.push(['_trackPageview']);\n\n  (function() {\n    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;\n    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';\n    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);\n  })();\n}\n\n$(window).bind('error', error);\n"
  },
  {
    "path": "views/api_limit.html",
    "content": "<div id=\"doc\" class=\"yui-t7\">\n  <header role=\"banner\"><h1>API Limit Reached</h1></header>\n  <article role=\"main\">\n    <div class=\"yui-g\">\n        <p>The API rate limit has been exceeded for your IP address. Please try again later.</p>\n    </div>\n  </article>\n\n  <footer role=\"contentinfo\"></footer>\n</div>\n"
  },
  {
    "path": "views/contrib.html",
    "content": "<div class=\"contributions\">\n  <h2>\n    <a href=\"{{repoUrl}}\">{{repoName}}</a>\n  </h2>\n  <p>{{username}} has contributed for <a href=\"{{repoUrl}}\">{{repoName}}</a> with <a href=\"{{commitsUrl}}\">{{count}} commit(s)</a></p>\n</div>\n"
  },
  {
    "path": "views/error.html",
    "content": "<div id=\"doc\" class=\"yui-t7\">\n  <header role=\"banner\"><h1>Uh oh :(</h1></header>\n  <article role=\"main\">\n    <div class=\"yui-g\">\n      <p>\n        There was an issue accessing the requested profile to auto-generate this r&eacute;sum&eacute;. <a href=\"https://github.com/{{username}}\" title=\"GitHub profile of {{username}}\">Access the user's profile directly.</a>\n      </p>\n    </div>\n  </article>\n  <footer role=\"contentinfo\"><p>Brought to you by the brilliant mind of <a href=\"https://twitter.com/davidcoallier\">@davidcoallier</a> &lt;/modesty&gt; &mdash; Resume Template from <a href=\"http://thingsthatarebrown.com/blog/2009/05/sample-resume-template/\">Things That Are Brown</a></p></footer>\n</div>\n"
  },
  {
    "path": "views/index.html",
    "content": "<div id=\"doc\" class=\"yui-t7\">\n  <header role=\"banner\"><h1>My GitHub R&eacute;sum&eacute;</h1></header>\n  <article role=\"main\">\n    <div class=\"yui-g\">\n      <p class=\"enlarge-medium\">\n        As a software startup owner I really enjoy when people send us their\n        r&eacute;sum&eacute;s and they include their github account so we can see tangible work they have done.\n      </p>\n      <p><br /></p>\n      <p class=\"enlarge-medium\">\n        After a <a href=\"https://twitter.com/#!/jeresig/status/33968704983138304\">tweet by John Resig</a>\n        I imagined that it may be nice for people to be able to generate their <a href=\"https://github.com\" title=\"GitHub\">GitHub</a> r&eacute;sum&eacute;s.\n      </p>\n      <p><br /><br /></p>\n\n      <form id=\"run\" action=\".\" method=\"get\">\n        <p>\n          <input id=\"username\" type=\"text\" placeholder=\"Enter your GitHub username and click on generate\" autofocus />\n          <button type=\"submit\" id=\"gen\">Generate</button>\n        </p>\n      </form>\n\n    </div>\n\n    <div class=\"yui-g\">\n      <p><br /><br /></p>\n      <h2>See some popular users</h2>\n      <div class=\"yui-gb\">\n        <ul>\n          <li><a href=\"/?mxcl\" title=\"Max Howell\">Max Howell</a></li>\n        </ul>\n      </div>\n      <div class=\"yui-gb\">\n        <ul>\n          <li class=\"\"><a href=\"/?defunkt\" title=\"Chris Wanstrath\">Chris Wanstrath</a></li>\n        </ul>\n      </div>\n      <br />\n    </div>\n\n    <div class=\"yui-g last\">\n      <div class=\"yui-main\">\n        <br /><br />\n        <h2>Notes, Information and Future features</h2>\n        <p class=\"enlarge-medium\"><br />\n        This is the first version. I am planning on adding\n        things as such as your most committed forks, most committed repositories and make the \"My Popular Repositories\" be built from\n        your complete list of repositories. Feel free to <a href=\"https://github.com/resume/resume.github.com\">fork the page</a> if you want to help :-)\n        <br /><br />\n        </p>\n      </div>\n    </div>\n  </article>\n\n  <footer role=\"contentinfo\"><p>Brought to you by the brilliant mind of <a href=\"https://twitter.com/davidcoallier\">@davidcoallier</a> &lt;/modesty&gt; &mdash; R&eacute;sum&eacute; Template from <a href=\"http://thingsthatarebrown.com/blog/2009/05/sample-resume-template/\">Things That Are Brown</a></p></footer>\n</div>\n\n<script type=\"text/javascript\">\n$(document).ready(function() {\n    $('form#run').submit(function(e){\n        var genUser = $('#username').val();\n        document.location = document.location.pathname + \"?\" + genUser;\n        e.preventDefault();\n    });\n});\n</script>\n"
  },
  {
    "path": "views/job.html",
    "content": "<div class=\"job {{last}}\">\n  <h2>\n    <a href=\"https://github.com/{{username}}/{{name}}\">{{name}}</a>\n  </h2>\n  <h3>{{#language}}{{language}} &ndash; {{/language}}Creator &amp; Owner</h3>\n  <h4>{{date}}</h4>\n  <p>{{{description}}} {{#homepage}}<a href=\"{{homepage}}\">{{homepage}}</a>{{/homepage}}</p>\n  <p>\n    This repository has {{watchers}} {{watchersLabel}} and {{forks}} {{forksLabel}}.\n    If you would like more information about this repository and my\n    contributed code, please visit\n    <a href=\"https://github.com/{{username}}/{{name}}\">the repo</a> on\n    GitHub.\n  </p>\n</div>\n"
  },
  {
    "path": "views/not_found.html",
    "content": "<div id=\"doc\" class=\"yui-t7\">\n  <header role=\"banner\"><h1>User Not Found</h1></header>\n  <article role=\"main\">\n    <div class=\"yui-g\">\n      <p>The user you requested was not found. Please check your spelling and try again.</p>\n    </div>\n  </article>\n\n  <footer role=\"contentinfo\"></footer>\n</div>\n"
  },
  {
    "path": "views/opt_out.html",
    "content": "<div id=\"doc\" class=\"yui-t7\">\n  <header role=\"banner\"><h1>This user hasn't opted in</h1></header>\n  <article role=\"main\">\n    <div class=\"yui-g\">\n      <p>This user has <strong>not</strong> opted in to this unofficial GitHub résumé service.</p>\n      <br />\n      <p>If you would like to opt-in, simply go to our <a href=\"https://github.com/resume/resume.github.com\">GitHub Project</a> page and <strong>star</strong> the project.</p>\n    </div>\n  </article>\n\n  <footer role=\"contentinfo\"></footer>\n</div>\n"
  },
  {
    "path": "views/org.html",
    "content": "<div class=\"org {{last}}\">\n  <h2>{{name}}</h2>\n  <h3>Member</h3>\n  <h4>{{now}}</h4>\n  <p>If you would like more information about this organization, please visit <a href=\"https://github.com/{{name}}\">the organization page</a> on GitHub.</p>\n</div>\n"
  },
  {
    "path": "views/resume.html",
    "content": "<div id=\"actions\" class=\"yui-t7\">\r\n  <a href=\"#\" id=\"print\">Print</a>\r\n  <a href=\"mailto:?subject=Resume for {{name}}&body=Link to resume: {{resume_url}}\" id=\"email\">Email</a>\r\n</div>\r\n\r\n<div id=\"doc2\" class=\"yui-t7\">\r\n\r\n  <div id=\"inner\" class=\"vcard\">\r\n\r\n    <header>\r\n      <div class=\"yui-gc\">\r\n        <div class=\"yui-u first\">\r\n          <h1 class=\"fn\">{{name}}</h1>\r\n          <h2>{{userStatus}}</h2>\r\n        </div>\r\n\r\n        <div class=\"yui-u\">\r\n          <div class=\"contact-info\">\r\n            {{#gravatar_id}}\r\n            <img src=\"https://secure.gravatar.com/avatar/{{gravatar_id}}?s=140&amp;d=https://github.com/images/gravatars/gravatar-140.png\" alt=\"avatar\" class=\"photo\" />\r\n            {{/gravatar_id}}\r\n            {{#email}}<h3><a href=\"mailto:{{email}}\" class=\"email\">{{email}}</a></h3>{{/email}}\r\n          </div><!--// .contact-info -->\r\n        </div>\r\n      </div><!--// .yui-gc -->\r\n    </header>\r\n\r\n    <article>\r\n      <div id=\"yui-main\">\r\n        <div class=\"yui-b\">\r\n\r\n          <div id=\"profile\" class=\"yui-gf\">\r\n            <div class=\"yui-u first\">\r\n              <h2>GitHub Profile</h2>\r\n            </div>\r\n            <div class=\"yui-u\">\r\n              <p class=\"enlarge\">\r\n                 On GitHub {{#earlyAdopter}}as an early adopter {{/earlyAdopter}} since {{since}}, {{name}} is a developer\r\n                 {{#location}}\r\n                 based in <span class=\"adr locality\">{{location}}</span>\r\n                 {{/location}}\r\n                 {{#repos}}with <a href=\"https://github.com/{{{username}}}?tab=repositories\">{{repos}} public {{reposLabel}}</a>{{/repos}}{{^repos}}without any public repository for now{{/repos}}{{#followers}}&nbsp;and <a href=\"https://github.com/{{{username}}}/followers\">{{followers}} {{followersLabel}}</a>{{/followers}}.\r\n              </p>\r\n            </div>\r\n          </div><!--// .yui-gf -->\r\n          {{#website}}\r\n          <div class=\"yui-gf\" id=\"mywebsite\">\r\n            <div class=\"yui-u first\">\r\n              <h2>Website</h2>\r\n            </div>\r\n            <div class=\"yui-u\" id=\"content-website\">\r\n              <a href=\"{{website}}\" id=\"mywebsite\" title=\"{{name}}'s website\">{{website}}</a>\r\n            </div>\r\n          </div>\r\n          {{/website}}\r\n          <div class=\"yui-gf\" id=\"mylanguages\">\r\n            <div class=\"yui-u first\">\r\n                <h2>Languages</h2>\r\n            </div>\r\n            <div class=\"yui-u\" id=\"content-languages\">\r\n            </div>\r\n          </div>\r\n          <div id=\"repositories\" class=\"yui-gf\">\r\n            <div class=\"yui-u first\">\r\n              <h2>Popular Repositories</h2>\r\n            </div><!--// .yui-u -->\r\n\r\n            <div class=\"yui-u\" id=\"jobs\">\r\n              <span>Loading information...</span><img src=\"images/loader.gif\" />\r\n            </div><!--// .yui-u -->\r\n          </div><!--// .yui-gf -->\r\n\r\n          <div id=\"contributions\" class=\"yui-gf\">\r\n            <div class=\"yui-u first\">\r\n              <h2>Contributions</h2>\r\n            </div><!--// .yui-u -->\r\n\r\n            <div class=\"yui-u\" id=\"contrib-jobs\">\r\n              <span>Loading information...</span><img src=\"images/loader.gif\" />\r\n            </div><!--// .yui-u -->\r\n          </div><!--// .yui-gf -->\r\n\r\n          <div class=\"yui-gf\" id=\"organizations\">\r\n            <div class=\"yui-u first\">\r\n              <h2>Organizations</h2>\r\n            </div><!--// .yui-u -->\r\n\r\n            <div class=\"yui-u\" id=\"orgs\">\r\n              <span>Loading information...</span><img src=\"images/loader.gif\" />\r\n            </div><!--// .yui-u -->\r\n          </div><!--// .yui-gf -->\r\n\r\n          <div id=\"about\" class=\"yui-gf last\">\r\n            <div class=\"yui-u first\">\r\n              <h2>About This R&eacute;sum&eacute;</h2>\r\n            </div>\r\n            <div class=\"yui-u\">\r\n              <p class=\"enlarge\">\r\n                This r&eacute;sum&eacute; is generated automatically using public information from the developer's GitHub account. The repositories are\r\n                ordered by popularity based on a very simple popularity heuristic that defines the popularity of a repository\r\n                by its sum of watchers and forks. Do not hesitate to visit <a href=\"https://github.com/{{{username}}}\" title=\"{{name}}'s GitHub page\">{{name}}'s GitHub page</a>\r\n                for a complete work history.\r\n              </p>\r\n            </div>\r\n          </div><!--// .yui-gf -->\r\n        </div><!--// .yui-b -->\r\n      </div><!--// yui-main -->\r\n    </article>\r\n\r\n    <footer>\r\n      <p>{{name}} &mdash; {{#email}}<a href=\"mailto:{{email}}\">{{email}}</a> &mdash; {{/email}} {{#website}}<a href=\"{{website}}\" title=\"{{name}}'s website\">{{website}}</a> &mdash; {{/website}} <a href=\"https://github.com/{{username}}\" title=\"GitHub profile\" class=\"url\">https://github.com/{{username}}</a></p>\r\n    </footer>\r\n\r\n  </div><!-- // inner -->\r\n\r\n</div><!--// doc -->\r\n"
  },
  {
    "path": "views/resumeOrgs.html",
    "content": "<div id=\"doc2\" class=\"yui-t7\">\n  <div id=\"inner\">\n\n    <header>\n      <div class=\"yui-gc\">\n        <div class=\"yui-u first\">\n          <hgroup>\n            <h1>{{name}}</h1>\n            <h2>Github organization</h2>\n          </hgroup>\n        </div>\n\n        <div class=\"yui-u\">\n          <div class=\"contact-info\">\n            {{#gravatar_id}}\n            <img src=\"{{avatar_url}}\" alt=\"avatar\" class=\"photo\"/>\n            {{/gravatar_id}}\n            {{#email}}<h3><a href=\"mailto:{{email}}\">{{email}}</a></h3>{{/email}}\n          </div><!--// .contact-info -->\n        </div>\n      </div><!--// .yui-gc -->\n    </header>\n\n    <article>\n      <div id=\"yui-main\">\n        <div class=\"yui-b\">\n\n          <div class=\"yui-gf\">\n            <div class=\"yui-u first\">\n              <h2>Github Profile</h2>\n            </div>\n            <div class=\"yui-u\">\n              <p class=\"enlarge\">\n                 We are a group of developers\n                 {{#location}}\n                 based in {{location}}\n                 {{/location}}\n                 {{#repos}}\n                 with <a href=\"https://github.com/{{{username}}}?tab=repositories\">{{repos}} public {{reposLabel}}</a>\n                 {{/repos}}\n                 {{#followers}}&nbsp;and <a href=\"https://github.com/{{{username}}}/followers\">{{followers}} {{followersLabel}}</a>{{/followers}}.\n                 We created this GitHub group in {{since}}{{#earlyAdopter}}, therefore we're early adopters,{{/earlyAdopter}}{{#website}}&nbsp;and you can find more information about us at <a href=\"{{website}}\" id=\"mywebsite\" title=\"my website\">{{website}}</a>{{/website}}.\n              </p>\n              <p id=\"languages\" class=\"enlarge\"></p>\n            </div>\n          </div><!--// .yui-gf -->\n          <div class=\"yui-gf\" id=\"mylanguages\">\n              <div class=\"yui-u first\">\n                  <h2>Languages</h2>\n              </div>\n              <div class=\"yui-u\" id=\"content-languages\">\n\n              </div>\n          </div>\n          <div class=\"yui-gf\">\n            <div class=\"yui-u first\">\n              <h2>Our Popular Repositories</h2>\n            </div><!--// .yui-u -->\n\n            <div class=\"yui-u\" id=\"jobs\">\n              <span>Loading information...</span><img src=\"images/loader.gif\" />\n            </div><!--// .yui-u -->\n          </div><!--// .yui-gf -->\n\n          <div class=\"yui-gf last\">\n            <div class=\"yui-u first\">\n              <h2>About This R&eacute;sum&eacute;</h2>\n            </div>\n            <div class=\"yui-u\">\n              <p class=\"enlarge\">\n                This r&eacute;sum&eacute; is generated automatically using information from github. The repositories are\n                ordered by popularity based on a very simple popularity heuristic that defines the popularity of a repository\n                by its sum of watchers and forks. Do not hesitate to visit <a href=\"https://github.com/{{{username}}}\" title=\"My Github page\">our github group's page</a>\n                for more information about our repositories and work.\n              </p>\n            </div>\n          </div><!--// .yui-gf -->\n        </div><!--// .yui-b -->\n      </div><!--// yui-main -->\n    </article>\n\n    <footer>\n      <p>{{name}} &mdash; {{#email}}<a href=\"mailto:{{email}}\">{{email}}</a> &mdash; {{/email}} <a href=\"https://github.com/{{username}}\" title=\"Github profile\">https://github.com/{{username}}</a></p>\n    </footer>\n\n  </div><!-- // inner -->\n\n</div><!--// doc -->\n"
  }
]