;(function() {
if (document.addEventListener) {
document.addEventListener('DOMContentLoaded', initProject, false)
} else if (window.attachEvent) {
window.attachEvent('onload', initProject)
}
function initProject() {
var projectName = document.getElementById('project').dataset.title
var data = createObjectStore(projectName)
function html(id, h) {
document.getElementById(id).innerHTML = h
}
var body = document.getElementsByTagName('body')[0]
, text
if ('innerText' in body) {
text = function(id, text) {
document.getElementById(id).innerText = text
}
} else {
text = function(id, text) {
document.getElementById(id).textContent = text
}
}
function langsByUsage(langs) {
return Object.keys(langs).sort(function(a, b) {
return langs[a] < langs[b] ? -1 : 1
})
}
function listify(things) {
return '
'
}
function updateBranches(name, branches) {
function branchLink(b) {
return '' + b.name + ''
}
html('branches', listify(branches.map(branchLink)))
}
function updateContributors(contributors) {
function userLink(u) {
return '' + (u.name || u.login) + ''
}
html('contributors', listify(contributors.map(userLink)))
}
function updateLangs(langs) {
html('langs', listify(langsByUsage(langs)))
}
function updateN(name, n) {
var pluralized = n == 1 ? name : name + 's'
text('n' + name, (n == 0 ? 'no' : n) + ' ' + pluralized)
}
function updateStars(n) {
html('nstar', n + ' ✭')
}
var Months = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' ')
var t = data.get('t-' + projectName)
if (!t || +new Date() - t > 3600 * 1000) {
data.set('t-' + projectName, +new Date())
var repo = GITR.repo('samsonjs', projectName)
repo
.fetch(function(err, repo) {
if (err) {
text('updated', '(oops)')
return
}
var d = new Date(repo.updatedAt)
var updated = d.getDate() + ' ' + Months[d.getMonth()] + ', ' + d.getFullYear()
text('updated', updated)
data.set('stars', repo.stargazersCount)
updateStars(repo.stargazersCount)
data.set('forks', repo.forksCount)
updateN('fork', repo.forksCount)
})
.fetchLanguages(function(err, langs) {
if (err) {
text('langs', '(oops)')
return
}
data.set('langs', langs)
updateLangs(langs)
})
.fetchContributors(function(err, users) {
if (err) {
text('contributors', '(oops)')
} else {
data.set('contributors', users)
updateContributors(users)
}
})
} else {
try {
updateBranches(projectName, data.get('branches'))
updateLangs(data.get('langs'))
updateContributors(data.get('contributors'))
updateStars(data.get('stars').length)
updateN('fork', data.get('forks').length)
} catch (e) {
data.set('t-' + projectName, null)
initProject()
}
}
}
}());