JSFiddle - React, Tailwind, and code Playground
by Laurens Maneschijn
HTML
gitlab api scribbles
JavaScript
async function get_projects() {
var projects = [];
projects = await gitlab_api_all_pages('//orange.dev/api/v4/projects?per_page=100');
return projects;
}
async function gitlab_api_all_pages(url) {
var results = [];
var page = 1;
var per_page = 100;
var result;
var next_page, total_pages, total;
while (true) {
try {
result = await gitlab_api_page_call(url, per_page, page);
if (result && result.data && Array.isArray(result.data)) {
results = results.concat(result.data);
} else {
console.log(result);
// throw Error('result.data was not an array.');
break;
}
nextpage = false;
if (result && result.response && result.response.headers && result.response.headers.get) {
total = result.response.headers.get('X-Total');
total_pages = result.response.headers.get('X-Total-Pages');
if (result.response.headers.get('X-Next-Page') > page) {
nextpage = result.response.headers.get('X-Next-Page');
} else if (total_pages && page < total_pages) {
nextpage = page + 1;
}
}
if (result && result.headers) {
total = result.headers['x-total'];
total_pages = result.headers['x-total-pages'];
if (result.headers['x-next-page'] > page) {
nextpage = result.headers['x-next-page'];
} else if (total_pages && page < total_pages) {
nextpage = page + 1;
}
}
if (nextpage) {
page = nextpage;
} else {
break;
}
} catch(e) {
console.log(e);
break;
}
break;
}
return results;
}
async function gitlab_api_page_call(url, per_page=100, page=1) {
if (!per_page) {
per_page = 100;
}
if (!page) {
page = 100;
}
// NB: new URL() does not work for '//...' urls
url = getSameProtocolUrlOrHttps(''+url);
var url_obj = new URL(url);
url_obj.searchParams.set('per_page', per_page);
url_obj.searchParams.set('page', page);
url = url_obj.toString();
// https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
//...