Commit: 1fb2c1c3c3e40e21f78f10ad7ae5e75f4802c71d Author: Javier Infante <[email protected]> Thu, 27 Apr 2017 11:41:51 +0200 Parents: bdbad3ce56b58bbcac8812519dfb1b71af75e1c9 Branches: master
Link: http://git.php.net/?p=web/bugs.git;a=commitdiff;h=1fb2c1c3c3e40e21f78f10ad7ae5e75f4802c71d Log: Using json instead of JSONP. per_page=100 applied to repos and pulls. Will work if there are more than 100 php repos or pull requests. Changed paths: M templates/addghpull.php Diff: diff --git a/templates/addghpull.php b/templates/addghpull.php index e848816..d60eb2e 100644 --- a/templates/addghpull.php +++ b/templates/addghpull.php @@ -68,89 +68,119 @@ var converter; if (typeof($) != "function") { window.alert("Failed to load jQuery!"); } + $(document).ready(function() { + var MAX_PER_PAGE = 100; var org = "php"; var baseurl = "https://api.github.com/"; - var url = baseurl+'orgs/'+org+'/repos?per_page=100'; + var url = baseurl+'orgs/'+org+'/repos?per_page=' + MAX_PER_PAGE; + converter = new Markdown.getSanitizingConverter(); + $("#pull_id_field").empty().hide(); $('#pull_details').empty(); - var repos = new Array(); - - function loadGHRepos(url) { - $.ajax({ dataType: 'jsonp', url: url, success: function(d) { - for (var i in d.data) { - repos.push(d.data[i].name); + + // using https://gist.github.com/niallo/3109252 + function parse_link_header(header) { + if (header.length === 0) { + throw new Error("input must not be of zero length"); + } + + // Split parts by comma + var parts = header.split(','); + var links = {}; + // Parse each part into a named link + for(var i=0; i<parts.length; i++) { + var section = parts[i].split(';'); + if (section.length !== 2) { + throw new Error("section could not be split on ';'"); } - // Follow pagination if exists next - if (d.meta && d.meta.Link) { - for(var l in d.meta.Link) { - if (d.meta.Link[l][1] && d.meta.Link[l][1].rel && d.meta.Link[l][1].rel == 'next') { - loadGHRepos(d.meta.Link[l][0]); - return; - } + var url = section[0].replace(/<(.*)>/, '$1').trim(); + var name = section[1].replace(/rel="(.*)"/, '$1').trim(); + links[name] = url; + } + return links; + } + + + function recursiveFetch(url, items, finalCallback) { + var hasNext = false; + $.ajax({ dataType: 'json', url: url, success: function(data, textStatus, request) { + items = items.concat(data); + if (request.getResponseHeader('Link')) { + var links = parse_link_header(request.getResponseHeader('Link')); + if (links['next']) { + hasNext = true; + recursiveFetch(links['next'], items, finalCallback); } } - // No more next Links, draw them! - drawRepos(); + if (hasNext === false) { + finalCallback(items); } + } }); } - function drawRepos() { + var repos = [], gh_pulls = []; + recursiveFetch(url, [], function(items) { + items.map(function(repo) { + repos.push(repo.name); + }); repos.sort(); - for (var i in repos) { - $("#repository_field").append("<option>"+repos[i]+"</option>"); - } + repos.map(function(repo) { + $("#repository_field").append("<option>"+repo+"</option>"); + }); $("#loading").hide(); - } - loadGHRepos(url); + }); -}); - -$("#repository_field").change(function() { - $("#pull_id_field").empty().hide(); - $('#pull_details').empty(); - $('#loading').show(); - gh_pulls = false; - $("#pull_id_field").append("<option value=''></option>"); - var repo = $("#repository_field").val(); - if (repo == "") { - $('#loading').hide(); - return; - } - var org = "php"; - var baseurl = "https://api.github.com/"; - var url = baseurl+'repos/'+org+'/'+repo+'/pulls?per_page=100'; - $.ajax({ dataType: 'jsonp', url: url, success: function(d) { - d.data.sort(function(a, b) { return a.number - b.number; }); - for (var i in d.data) { - $("#pull_id_field").append("<option value="+(d.data[i].number+0)+">"+d.data[i].number+" - "+d.data[i].title+"</option>"); + $("#repository_field").change(function() { + $("#pull_id_field").empty().hide(); + $('#pull_details').empty(); + $('#loading').show(); + gh_pulls = []; + $("#pull_id_field").append("<option value=''></option>"); + var repo = $("#repository_field").val(); + if (repo == "") { + $('#loading').hide(); + return; } - gh_pulls = d.data; - $("#pull_id_field").show(); - $("#loading").hide(); - }}); -}); -$("#pull_id_field").change(function() { - var val = $("#pull_id_field").val(); - $('#pull_details').empty(); - if (val == "" || !gh_pulls) { - return; - } - var pr = false; - for (var i in gh_pulls) { - if (gh_pulls[i].number == val) { - pr = gh_pulls[i]; - break; + var url = baseurl + 'repos/' + org + '/' + repo + '/pulls?per_page=' + MAX_PER_PAGE; + recursiveFetch(url, [], function(items) { + items.sort(function (a, b) { + return a.number - b.number; + }); + items.map(function(item) { + $("#pull_id_field").append("<option value=" + (item.number + 0) + ">" + item.number + " - " + item.title + "</option>"); + }); + gh_pulls = items; + $("#pull_id_field").show(); + $("#loading").hide(); + }); + }); + + + $("#pull_id_field").change(function() { + var val = $("#pull_id_field").val(); + $('#pull_details').empty(); + if (val == "" || gh_pulls.length === 0) { + return; } - } - if (pr) { - $('#pull_details').append('<b>'+pr.title+'</b><br>'+converter.makeHtml(pr.body)+'<p><a href="'+pr.html_url+'">View on GitHub</a></p>'); - } -}); + var pr = false; + for (var i in gh_pulls) { + if (gh_pulls[i].number == val) { + pr = gh_pulls[i]; + break; + } + } + if (pr) { + $('#pull_details').append('<b>'+pr.title+'</b><br>'+converter.makeHtml(pr.body)+'<p><a href="'+pr.html_url+'">View on GitHub</a></p>'); + } + }); + +}); // document.load + </script> <br> <?php -- PHP Webmaster List Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
