@@ -26,34 +26,55 @@ async function loadRepos() {
2626 const container = document . querySelector ( '#repositories-container' ) ;
2727 const configsWeb = await loadConfigs ( ) ;
2828 try {
29- const res = await fetch ( 'https://api.github.com/users/Dev2Forge/repos' ) ;
30- const repos = await res . json ( ) ;
29+ const res = await fetch ( 'https://api.github.com/orgs/dev2forge/repos' ) ;
30+ /**
31+ * @type {Array<String> }
32+ */
33+ let repos = await res . json ( ) ;
34+ repos = repos . sort ( ( a , b ) => a ?. name ?. toLowerCase ( ) . charCodeAt ( 0 ) - b ?. name ?. toLowerCase ( ) . charCodeAt ( 0 ) ) ;
3135 repos . forEach ( ( repo ) => {
3236 // Skip repositories that are not in the configsWeb list
3337 if ( ! configsWeb . ignoreRepos . includes ( repo . name ) ) {
3438 const card = document . createElement ( 'div' ) ;
35- card . className = 'flex flex-col justify-between items-center w-64 h-64 bg-gray-100 dark:bg-gray-800 p-4 rounded shadow hover:shadow-lg transition snap-start row-span-1' ;
36- card . innerHTML = `<h2 class="text-xl font-semibold text-center w-full mb-2">${ repo . name } </h2>
39+ card . className = 'flex flex-col justify-between items-center w-64 h-95 bg-gray-100 dark:bg-gray-800 p-4 rounded shadow hover:shadow-lg transition snap-start row-span-1' ;
40+ card . innerHTML = `
41+ <h2 class="text-xl font-semibold text-center w-full mb-2">${ repo . name } </h2>
3742 <div class="flex-1 w-full overflow-y-auto mb-2 no-scrollbar">
3843 <p class="text-sm text-gray-600 dark:text-gray-300 text-center break-words">${ repo . description || 'No description' } </p>
3944 </div>
4045 <div class="w-full flex justify-center mt-auto gap-3">
4146 <a href="${ repo . html_url } " target="_blank" class="btn-repo-link flex items-center justify-center w-12 h-12 rounded-full bg-blue-100 dark:bg-blue-900 shadow hover:scale-110 hover:bg-blue-500 hover:text-white transition border border-blue-300 dark:border-blue-700 mr-0.5">
4247 <img width="24" height="24" src="https://cdn.jsdelivr.net/gh/tutosrive/images-projects-srm-trg@refs/heads/main/svg-icons-flags-cursor/icon/github-logo.svg" alt="GitHub">
4348 </a>
44- <a href="${ repo . homepage } " target="_blank" class="btn-repo-link flex items-center justify-center w-12 h-12 rounded-full bg-blue-100 dark:bg-blue-900 shadow hover:scale-110 hover:bg-blue-500 hover:text-white transition border border-blue-300 dark:border-blue-700 ml-0.5">
49+ <a href="${ repo . homepage } " class="btn-repo-link flex items-center justify-center w-12 h-12 rounded-full bg-blue-100 dark:bg-blue-900 shadow hover:scale-110 hover:bg-blue-500 hover:text-white transition border border-blue-300 dark:border-blue-700 ml-0.5">
4550 <img width="16" height="16" src="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/icons/box-arrow-up-right.svg" alt="Icon redirect">
4651 </a>
4752 </div>
53+ <div class="w-full flex justify-center pt-4">
54+ <img alt="Pepy Total Downloads" src="https://img.shields.io/pepy/dt/${ fix_name ( repo . name ) } ?color=blue&style=flat-square" class="h-5 object-contain me-1">
55+ <img alt="PyPI - Version" src="https://img.shields.io/pypi/v/${ fix_name ( repo . name ) } ?color=orange" class="h-5 object-contain">
56+ </div>
57+ <div class="w-full flex justify-center">
58+ <img width="100" src="${ configsWeb . logos [ repo . name . toLowerCase ( ) ] } " alt="${ repo . name } logo" class="object-cover rounded mt-2">
59+ </div>
60+ <div class="w-full flex justify-center mt-2">
61+ <code class="text-sm">pip install ${ fix_name ( repo . name ) } </code>
62+ </div>
4863 ` ;
64+
4965 container . appendChild ( card ) ;
5066 }
5167 } ) ;
5268 } catch ( e ) {
69+ console . log ( e ) ;
5370 container . innerHTML = '<p class="text-red-500">Failed to load repositories.</p>' ;
5471 }
5572}
5673
74+ function fix_name ( name ) {
75+ return name === 'E-SRM' ? 'effect-srm' : name ;
76+ }
77+
5778async function loadConfigs ( ) {
5879 const req = await fetch ( 'src/assets/json/configs.json' ) ;
5980 const data = await req . json ( ) ;
0 commit comments