1
1
document . addEventListener ( 'DOMContentLoaded' , function ( ) {
2
- const directoriesList = document . getElementById ( 'directories' ) ;
3
-
2
+ // Function to fetch and display directories
4
3
async function fetchDirectories ( ) {
4
+ const directoriesList = document . getElementById ( 'directories' ) ;
5
5
try {
6
6
const response = await fetch ( '/api/github/repos' ) ;
7
-
8
7
if ( ! response . ok ) {
9
8
throw new Error ( `HTTP error! status: ${ response . status } ` ) ;
10
9
}
11
-
12
10
const data = await response . json ( ) ;
13
-
14
11
const directories = data . filter ( item => item . type === 'dir' && item . name !== 'Website' ) ;
15
12
16
13
directories . forEach ( directory => {
@@ -35,27 +32,80 @@ document.addEventListener('DOMContentLoaded', function() {
35
32
}
36
33
}
37
34
38
- fetchDirectories ( ) ;
39
- } ) ;
35
+ // Function to toggle languages section
36
+ function toggleLanguagesSection ( ) {
37
+ const toggleLanguagesButton = document . createElement ( 'button' ) ;
38
+ toggleLanguagesButton . id = 'toggle-languages' ;
39
+ toggleLanguagesButton . textContent = 'Show/Hide Languages Used' ;
40
+ const languagesList = document . getElementById ( 'language-list' ) ;
41
+ document . getElementById ( 'languages' ) . insertBefore ( toggleLanguagesButton , languagesList ) ;
42
+
43
+ languagesList . style . display = 'none' ;
40
44
45
+ toggleLanguagesButton . addEventListener ( 'click' , function ( ) {
46
+ languagesList . style . display = languagesList . style . display === 'none' ? 'block' : 'none' ;
47
+ } ) ;
48
+ }
49
+
50
+ // Function to fetch and display repository stats
51
+ async function fetchRepoStats ( ) {
52
+ const repoOwner = 'recodehive' ;
53
+ const repoName = 'machine-learning-repos' ;
54
+ const apiUrl = `https://api.github.com/repos/${ repoOwner } /${ repoName } ` ;
41
55
42
- document . addEventListener ( 'DOMContentLoaded' , async function ( ) {
43
- // Existing code...
56
+ try {
57
+ // Fetch repository data
58
+ const repoResponse = await fetch ( apiUrl ) ;
59
+ const repoData = await repoResponse . json ( ) ;
44
60
45
- // Toggle languages section
46
- const toggleLanguagesButton = document . createElement ( 'button' ) ;
47
- toggleLanguagesButton . id = 'toggle-languages' ;
48
- toggleLanguagesButton . textContent = 'Show/Hide Languages Used' ;
49
- document . getElementById ( 'languages' ) . insertBefore ( toggleLanguagesButton , document . getElementById ( 'language-list' ) ) ;
61
+ // Populate statistics cards
62
+ document . getElementById ( 'total-stars' ) . innerText = repoData . stargazers_count ;
63
+ document . getElementById ( 'total-forks' ) . innerText = repoData . forks_count ;
64
+ document . getElementById ( 'open-issues' ) . innerText = repoData . open_issues_count ;
65
+ document . getElementById ( 'license' ) . innerText = repoData . license ? repoData . license . spdx_id : 'No License' ;
66
+ document . getElementById ( 'repo-size' ) . innerText = ( repoData . size / 1024 ) . toFixed ( 2 ) + ' MB' ;
50
67
51
- const languagesList = document . getElementById ( 'language-list' ) ;
52
- languagesList . style . display = 'none' ;
68
+ // Fetch and display languages
69
+ const languagesResponse = await fetch ( `${ apiUrl } /languages` ) ;
70
+ const languagesData = await languagesResponse . json ( ) ;
71
+ const languageList = document . getElementById ( 'language-list' ) ;
72
+ const totalBytes = Object . values ( languagesData ) . reduce ( ( acc , val ) => acc + val , 0 ) ;
73
+ let mostUsedLanguage = { name : '' , bytes : 0 } ;
53
74
54
- toggleLanguagesButton . addEventListener ( 'click' , function ( ) {
55
- if ( languagesList . style . display === 'none' ) {
56
- languagesList . style . display = 'block' ;
57
- } else {
58
- languagesList . style . display = 'none' ;
75
+ for ( const [ language , bytes ] of Object . entries ( languagesData ) ) {
76
+ const percentage = ( ( bytes / totalBytes ) * 100 ) . toFixed ( 2 ) ;
77
+ const listItem = document . createElement ( 'li' ) ;
78
+ listItem . innerHTML = `
79
+ <span>${ language } </span>
80
+ <div class="progress-bar" style="width: ${ percentage } %;"></div>
81
+ ` ;
82
+ languageList . appendChild ( listItem ) ;
83
+
84
+ if ( bytes > mostUsedLanguage . bytes ) {
85
+ mostUsedLanguage = { name : language , bytes : bytes } ;
86
+ }
87
+ }
88
+
89
+ document . getElementById ( 'most-used-language' ) . innerText = mostUsedLanguage . name ;
90
+
91
+ } catch ( error ) {
92
+ console . error ( 'Error fetching data from GitHub API:' , error ) ;
59
93
}
60
- } ) ;
94
+ }
95
+
96
+ // Function to toggle statistics section
97
+ function toggleStatsSection ( ) {
98
+ const toggleButton = document . getElementById ( 'toggle-stats' ) ;
99
+ const statsSection = document . getElementById ( 'statistics-cards' ) ;
100
+ statsSection . style . display = 'none' ;
101
+
102
+ toggleButton . addEventListener ( 'click' , function ( ) {
103
+ statsSection . style . display = statsSection . style . display === 'none' ? 'block' : 'none' ;
104
+ } ) ;
105
+ }
106
+
107
+ fetchDirectories ( ) ;
108
+ toggleLanguagesSection ( ) ;
109
+ fetchRepoStats ( ) ;
110
+ toggleStatsSection ( ) ;
61
111
} ) ;
0 commit comments