This repository was archived by the owner on Jul 14, 2020. It is now read-only.
forked from jenkoian/hacktoberfest-checker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
129 lines (103 loc) · 3.45 KB
/
Copy pathindex.js
File metadata and controls
129 lines (103 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
var express = require('express');
var GitHubApi = require("github");
var _ = require('lodash');
var q = require('q');
var exphbs = require('express-handlebars');
var cache = require('memory-cache');
var hbs = exphbs.create({
helpers: {
exists: function (variable, options) {
if (typeof variable !== 'undefined') {
return options.fn(this);
}
}
},
extname: 'hbs'
});
var app = express();
app.set('port', (process.env.PORT || 5000));
app.engine('hbs', hbs.engine);
app.set('view engine', 'hbs');
app.use('/normalize-css', express.static('bower_components/normalize-css'));
app.use('/foundation/css', express.static('bower_components/foundation/css'));
app.use('/foundation/js', express.static('bower_components/foundation/js'));
app.use(express.static('public'));
var github = new GitHubApi({
version: "3.0.0",
debug: true,
protocol: "https",
host: "api.github.com",
timeout: 5000,
headers: {
"user-agent": "Hacktoberfest Checker"
}
});
github.authenticate({
type: "oauth",
token: process.env.GITHUB_TOKEN
});
var octoberOpenPrs = [];
var userImage;
function getPullRequests(username) {
var deferred,
options;
deferred = q.defer();
options = {
q: 'created:2016-09-30T00:00:00-12:00..2016-10-31T23:59:59-12:00+type:pr+is:public+author:' + username
};
github.search.issues(options, function(err, res) {
if (err) {
deferred.reject();
return;
}
userImage = null;
_.each(res.items, function(event) {
var repo = event.pull_request.html_url.substring(0, event.pull_request.html_url.search('/pull'));
if (userImage == null) {
userImage = event.user.avatar_url;
}
var hacktoberFestLabels = _.filter(event.labels, function(label) {
return label.name.toLowerCase() === 'hacktoberfest';
});
var returnedEvent = {
repo_name: repo,
title: event.title,
url: event.html_url,
state: event.state,
hasHacktoberFestLabel: hacktoberFestLabels.length > 0
};
octoberOpenPrs.push(returnedEvent);
});
deferred.resolve();
});
return deferred.promise;
}
app.get('/', function(req, res) {
if (!req.query.username) {
return res.render('index');
}
getPullRequests(req.query.username).then(function() {
var length,
statements;
length = octoberOpenPrs.length;
statements = ["It's not too late to start!", "Keep going.", "Half way there.", "So close!", "Way to go!", "Now you're just showing off."];
if (length > 5) length = 5;
if (req.xhr) {
res.render('partials/prs', {prs: octoberOpenPrs, statement: statements[length], userImage: userImage});
} else {
res.render('index', {prs: octoberOpenPrs, statement: statements[length], username: req.query.username, userImage: userImage});
}
octoberOpenPrs = [];
}).catch(function() {
//res.render('partials/error');
if (req.xhr) {
res.render('partials/error');
} else {
res.render('index', {error: true, username: req.query.username});
}
octoberOpenPrs = [];
});
});
app.listen(app.get('port'), function() {
console.log('Node app is running on port', app.get('port'));
});