@@ -30,19 +30,35 @@ function build_fork_element_html(combined_name, num_stars, num_watches, num_fork
30
30
+ '</div></tr>' ;
31
31
}
32
32
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 ) {
34
38
return ( ) => {
35
- response = JSON . parse ( response . responseText ) ;
39
+ const response = JSON . parse ( request . responseText ) ;
36
40
let old_data = document . getElementById ( fork_username ) ;
41
+
42
+ if ( response . total_commits === 0 ) {
43
+ old_data . remove ( ) ;
44
+ }
45
+
37
46
let appendedData = old_data . insertCell ( ) ;
38
47
appendedData . innerHTML = '<div class="useful_forks_commits">'
39
48
+ ' | ' + ahead_badge ( response . ahead_by )
40
49
+ ' | ' + behind_badge ( response . behind_by )
41
- + ' | total_commits=' + response . total_commits
42
50
+ '</div>' ;
43
51
}
44
52
}
45
53
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"> | Something is wrong with this repository</div>' ;
59
+ }
60
+ }
61
+
46
62
function authenticatedRequestFactory ( url ) {
47
63
let request = new XMLHttpRequest ( ) ;
48
64
request . open ( 'GET' , url ) ;
@@ -66,16 +82,16 @@ function add_fork_elements(forkdata_array, user, repo) {
66
82
67
83
const fork_username = extract_username_from_fork ( elem_ref . full_name ) ;
68
84
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 ) ) ;
70
86
request . send ( ) ;
71
87
}
72
88
73
89
wrapper_html += '</table>' ;
74
90
75
- document . getElementById ( 'useful_forks_data' ) . innerHTML = wrapper_html ; // update data table
91
+ update_data_innerHTML ( wrapper_html ) ;
76
92
}
77
93
78
- function onreadystatechangeFactory ( xhr , successFn ) {
94
+ function onreadystatechangeFactory ( xhr , successFn , failureFn ) {
79
95
return ( ) => {
80
96
if ( xhr . readyState === 4 ) {
81
97
if ( xhr . status === 200 ) {
@@ -84,6 +100,7 @@ function onreadystatechangeFactory(xhr, successFn) {
84
100
console . warn ( 'Looks like the rate-limit was exceeded.' ) ;
85
101
} else {
86
102
console . warn ( 'GitHub API returned status:' , xhr . status ) ;
103
+ failureFn ( ) ;
87
104
}
88
105
} else {
89
106
// Request is still in progress
@@ -113,22 +130,40 @@ function prepare_display() {
113
130
wrapper . append ( data_display ) ;
114
131
}
115
132
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
+ }
120
138
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 )
123
141
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
+ } ) ;
126
158
request . send ( ) ;
127
159
}
128
160
129
- /* Entry point of the extension */
161
+ /* Entry point. */
130
162
const pathComponents = window . location . pathname . split ( '/' ) ;
131
163
if ( pathComponents . length >= 3 ) {
132
164
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 ) ;
134
169
}
0 commit comments