Skip to content

Commit f067a90

Browse files
committed
Filtering with "total_commits === 0"
1 parent 1c5f80b commit f067a90

File tree

1 file changed

+51
-16
lines changed

1 file changed

+51
-16
lines changed

project/useful_forks.js

Lines changed: 51 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,35 @@ function build_fork_element_html(combined_name, num_stars, num_watches, num_fork
3030
+ '</div></tr>';
3131
}
3232

33-
function commits_count(response, fork_username) {
33+
function update_data_innerHTML(innerHTML) {
34+
document.getElementById('useful_forks_data').innerHTML = innerHTML;
35+
}
36+
37+
function commits_count(request, fork_username) {
3438
return () => {
35-
response = JSON.parse(response.responseText);
39+
const response = JSON.parse(request.responseText);
3640
let old_data = document.getElementById(fork_username);
41+
42+
if (response.total_commits === 0) {
43+
old_data.remove();
44+
}
45+
3746
let appendedData = old_data.insertCell();
3847
appendedData.innerHTML = '<div class="useful_forks_commits">'
3948
+ '&nbsp;| ' + ahead_badge(response.ahead_by)
4049
+ '&nbsp;| ' + behind_badge(response.behind_by)
41-
+ '&nbsp;| total_commits=' + response.total_commits
4250
+ '</div>';
4351
}
4452
}
4553

54+
function commits_count_failure(fork_username) {
55+
return () => {
56+
let old_data = document.getElementById(fork_username);
57+
let appendedData = old_data.insertCell();
58+
appendedData.innerHTML = '<div class="useful_forks_commits">&nbsp;| Something is wrong with this repository</div>';
59+
}
60+
}
61+
4662
function authenticatedRequestFactory(url) {
4763
let request = new XMLHttpRequest();
4864
request.open('GET', url);
@@ -66,16 +82,16 @@ function add_fork_elements(forkdata_array, user, repo) {
6682

6783
const fork_username = extract_username_from_fork(elem_ref.full_name);
6884
let request = authenticatedRequestFactory('https://api.github.com/repos/' + user + '/' + repo + '/compare/master...' + fork_username + ':master');
69-
request.onreadystatechange = onreadystatechangeFactory(request, commits_count(request, fork_username));
85+
request.onreadystatechange = onreadystatechangeFactory(request, commits_count(request, fork_username), commits_count_failure(fork_username));
7086
request.send();
7187
}
7288

7389
wrapper_html += '</table>';
7490

75-
document.getElementById('useful_forks_data').innerHTML = wrapper_html; // update data table
91+
update_data_innerHTML(wrapper_html);
7692
}
7793

78-
function onreadystatechangeFactory(xhr, successFn) {
94+
function onreadystatechangeFactory(xhr, successFn, failureFn) {
7995
return () => {
8096
if (xhr.readyState === 4) {
8197
if (xhr.status === 200) {
@@ -84,6 +100,7 @@ function onreadystatechangeFactory(xhr, successFn) {
84100
console.warn('Looks like the rate-limit was exceeded.');
85101
} else {
86102
console.warn('GitHub API returned status:', xhr.status);
103+
failureFn();
87104
}
88105
} else {
89106
// Request is still in progress
@@ -113,22 +130,40 @@ function prepare_display() {
113130
wrapper.append(data_display);
114131
}
115132

116-
function load_useful_forks(user, repo) {
117-
add_css();
118-
prepend_title();
119-
prepare_display();
133+
function check_all_forks(request, user, repo) {
134+
const response = JSON.parse(request.responseText);
135+
console.log(response);
136+
add_fork_elements(response, user, repo);
137+
}
120138

121-
// todo: check "forks_count" for >100 (query "page=X")
122-
let request = authenticatedRequestFactory('https://api.github.com/repos/' + user + '/' + repo + '/forks?sort=stargazers&per_page=100')
139+
function request_fork_page(page_number, user, repo) {
140+
let request = authenticatedRequestFactory('https://api.github.com/repos/' + user + '/' + repo + '/forks?sort=stargazers&per_page=100&page=' + page_number)
123141
request.onreadystatechange = onreadystatechangeFactory(request,
124-
() => add_fork_elements(JSON.parse(request.responseText), user, repo)
125-
);
142+
() => {
143+
const response = JSON.parse(request.responseText);
144+
145+
if (!response || response.length === 0) {
146+
if (page_number === 0) {
147+
update_data_innerHTML("No forks found.")
148+
}
149+
return;
150+
}
151+
// todo: >100 forks
152+
// else if (response.length > 100) {
153+
// request_fork_page(page_number++, user, repo);
154+
// }
155+
156+
check_all_forks(request, user, repo);
157+
});
126158
request.send();
127159
}
128160

129-
/* Entry point of the extension */
161+
/* Entry point. */
130162
const pathComponents = window.location.pathname.split('/');
131163
if (pathComponents.length >= 3) {
132164
const user = pathComponents[1], repo = pathComponents[2];
133-
load_useful_forks(user, repo);
165+
add_css();
166+
prepend_title();
167+
prepare_display();
168+
request_fork_page(0, user, repo);
134169
}

0 commit comments

Comments
 (0)