var totalForkCount; var curForkCount=0; var errorForkArray = new Array(); function initProcess(){ var user = window.location.pathname.split('/')[1]; var pageNo = 1; var hrefArray = new Array(); while(hrefArray.length % 30 == 0){ var resp = sendSyncAjax("https://github.com/"+user+"?tab=repositories&page="+pageNo); hrefArray = hrefArray.concat(getReposFromHtml(resp)); pageNo++; } totalForkCount = hrefArray.length; forkAll(hrefArray); } function getReposFromHtml(response){ var text = response.responseText; var parser = new DOMParser(); var html = parser.parseFromString(text, "text/html"); var repoCount = html.getElementsByClassName('d-inline-block mb-1').length; var hrefArray = new Array(); for(var i=0; i<repoCount; i++){ hrefArray.push(html.getElementsByClassName('d-inline-block mb-1')[i].getElementsByTagName('a')[0].href); } return hrefArray; } function sendSyncAjax(url){ var xhr = new XMLHttpRequest(); xhr.open('GET', url, false); xhr.send(null); return xhr; } function forkAll(hrefArray){ var div = document.createElement('div'); div.style.display='none'; div.id='hdiv'; document.body.appendChild(div); for (var i=0; i<hrefArray.length; i++){ loadPageAndFork(hrefArray[i]); } } function loadPageAndFork(url){ var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var parser = new DOMParser(); var html = parser.parseFromString(xhr.responseText, "text/html"); if(html.getElementsByClassName('btn-with-count').length == 5){ var actionUrl = html.getElementsByClassName('btn-with-count')[3].action; var formData = html.getElementsByClassName('btn-with-count')[3].getElementsByTagName('input'); var postData = 'utf8=%E2%9C%93&authenticity_token='+encodeURIComponent(formData[1].value); sendForkRequest(actionUrl, postData); }else{ errorForkArray.push(url); if(totalForkCount == curForkCount+errorForkArray.length){ window.alert("Done forking "+totalForkCount+" repositories. Error with these: "+errorForkArray); } } } }; xhr.send(null); } function sendForkRequest(actionUrl, postData){ var xhr = new XMLHttpRequest(); xhr.open('POST', actionUrl, false); xhr.onreadystatechange = function() { if(this.readyState == 4){ if (this.status == 200) { curForkCount++; }else{ errorForkArray.push(actionUrl); } if(totalForkCount == curForkCount+errorForkArray.length){ window.alert("Done forking "+totalForkCount+" repositories. Error with these: "+errorForkArray); } } } xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xhr.send(postData); } initProcess();