-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
104 lines (77 loc) · 3.92 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
const githubUsername = 'davinyleticia'; // Substitua pelo seu usuário do GitHub
const gitlabUsername = 'davinyleticia'; // Substitua pelo seu usuário do GitLab
document.getElementById('github-name').textContent = 'Dáviny Letícia Vidal'
document.getElementById('name').textContent = 'Letícia'; // Substitua pelo seu nome
document.getElementById('url-website').href = `https://vidal.press/`;
const reposPorPagina = 12;
let paginaAtual = 1;
const topico = 'projects'; // Tópico a ser filtrado
const siteExternal = "site-external"
async function buscarRepos() {
try {
// Buscar repositórios do GitHub
const githubResponse = await fetch(`https://api.github.com/users/${githubUsername}/repos?per_page=100`);
const githubData = await githubResponse.json();
// Buscar repositórios do GitLab
const gitlabResponse = await fetch(`https://gitlab.com/api/v4/users/${gitlabUsername}/projects`);
const gitlabData = await gitlabResponse.json();
// Definir o avatar e o nome do usuário do GitHub
document.getElementById('github-avatar').src = `https://avatars.githubusercontent.com/${githubUsername}`;
// Combinar repositórios de ambas as plataformas
const todosRepos = [...githubData, ...gitlabData];
// Filtrar e ordenar repositórios por tópico e data
const reposFiltrados = todosRepos.filter(repo => {
// GitHub usa 'topics' e GitLab usa 'tag_list'
const topics = repo.topics || repo.tag_list || [];
return topics.includes(topico);
}).sort((a, b) => {
const dateA = new Date(a.updated_at || a.last_activity_at);
const dateB = new Date(b.updated_at || b.last_activity_at);
return dateB - dateA; // Ordem decrescente
});
exibirRepos(reposFiltrados);
} catch (error) {
console.error('Erro ao buscar repositórios:', error);
}
}
function exibirRepos(repos) {
const repoList = document.getElementById('repo-list');
const totalRepos = repos.length;
const totalPaginas = Math.ceil(totalRepos / reposPorPagina);
// Limpa a lista de repositórios
repoList.innerHTML = '';
// Calcula o índice inicial e final para a paginação
const indiceInicial = (paginaAtual - 1) * reposPorPagina;
const indiceFinal = Math.min(indiceInicial + reposPorPagina, totalRepos);
for (let i = indiceInicial; i < indiceFinal; i++) {
const repo = repos[i];
const listItem = document.createElement('li');
const repoName = repo.name;
if (repo.topics.includes(siteExternal)){
listItem.innerHTML = `<span><a href=${repo.homepage}>${repo.name || repo.path}</a></span><span>${repo.updated_at ? `Atualizado em: ${new Date(repo.updated_at || repo.last_activity_at).toLocaleDateString()}` : ''}</span>`;
repoList.appendChild(listItem);
}else
listItem.innerHTML = `<span><a href="readme.html?repo=${repoName}">${repo.name || repo.path}</a></span><span>${repo.updated_at ? `Atualizado em: ${new Date(repo.updated_at || repo.last_activity_at).toLocaleDateString()}` : ''}</span>`;
repoList.appendChild(listItem);
}
// Atualiza a contagem de repositórios
document.getElementById('repo-count').textContent = totalRepos;
// Atualiza a informação de paginação
document.getElementById('page-info').textContent = `Página ${paginaAtual} de ${totalPaginas}`;
// Habilita ou desabilita os botões de paginação
document.getElementById('prev').disabled = paginaAtual === 1;
document.getElementById('next').disabled = paginaAtual === totalPaginas;
}
// Funções para navegação nas páginas
document.getElementById('prev').onclick = () => {
if (paginaAtual > 1) {
paginaAtual--;
buscarRepos();
}
};
document.getElementById('next').onclick = () => {
paginaAtual++;
buscarRepos();
};
// Carregar repositórios ao iniciar
buscarRepos();