@@ -13,52 +13,72 @@ function formatBytes(numBytes) {
13
13
}
14
14
15
15
async function fetchGistData ( ) {
16
- const gistURL = 'https://gist.githubusercontent.com/beverleyy/c9112c25c5acd400b90741efa81aa411/raw/kaggle_stats.json' ;
17
-
18
- try {
19
- // Fetch data from Gist JSON
20
- const response = await fetch ( gistURL ) ;
21
- const data = await response . json ( ) ;
16
+ // Determine the data source based on the hostname and local file existence
17
+ const isLocal = window . location . hostname === "localhost" || window . location . hostname === "127.0.0.1" ;
18
+ const gistURL = 'https://gist.githubusercontent.com/beverleyy/c9112c25c5acd400b90741efa81aa411/raw/kaggle_stats.json' ;
19
+ const localURL = './kaggle_stats.json' ; // Path to the local JSON file
22
20
23
- // Parse JSON data
24
- const total_size = parseInt ( data . total_size ) ;
25
- const total_bytes = parseInt ( data . total_bytes ) ;
21
+ let dataURL = gistURL ;
26
22
27
- // Print total bytes downloaded
28
- const formattedNumber = total_bytes . toLocaleString ( ) ;
29
- const wrappedNumber = Array . from ( formattedNumber ) . map ( char => ( / \d / . test ( char ) ? `<span>${ char } </span>` :`<em>${ char } </em>` ) ) . join ( '' ) ;
30
- document . getElementById ( "kaggle_stat" ) . innerHTML = wrappedNumber + " bytes downloaded" ;
23
+ if ( isLocal ) {
24
+ try {
25
+ // Check if the local JSON file exists
26
+ const response = await fetch ( localURL , { method : 'HEAD' } ) ;
27
+ if ( response . ok ) {
28
+ dataURL = localURL ;
29
+ } else {
30
+ console . log ( "Local JSON file not found. Falling back to Gist." ) ;
31
+ }
32
+ } catch ( error ) {
33
+ console . log ( "Error checking local JSON file. Falling back to Gist:" , error ) ;
34
+ }
35
+ }
36
+
37
+ try {
38
+ // Fetch data from the appropriate source
39
+ console . log ( `Fetching data from: ${ dataURL } ` ) ;
40
+ const response = await fetch ( dataURL ) ;
41
+ const data = await response . json ( ) ;
42
+
43
+ // Parse JSON data
44
+ const total_size = parseInt ( data . total_size ) ;
45
+ const total_bytes = parseInt ( data . total_bytes ) ;
31
46
32
- // Print total dataset size
33
- const formattedSize = formatBytes ( total_size ) ;
34
- const wrappedSize = formattedSize . split ( / ( \s + ) / ) . map ( chunk => {
35
- if ( / ^ \d + $ / . test ( chunk ) )
36
- return Array . from ( chunk ) . map ( char => `<span>${ char } </span>` ) . join ( '' ) ;
37
- else if ( / ^ \w + $ / . test ( chunk ) )
38
- return `<span>${ chunk } </span>` ;
39
- else
40
- return chunk ;
41
- } ) . join ( '' ) ;
42
- document . getElementById ( "kaggle_size" ) . innerHTML = wrappedSize ;
43
- document . getElementById ( "data_size" ) . innerHTML = formattedSize ;
44
-
45
- // Extra formatting thanks matthias
46
- let children = Array . from ( document . getElementById ( "kaggle_stat" ) . children ) ;
47
- let firstEmIndex = children . findIndex ( child => child . tagName . toLowerCase ( ) === 'em' ) ;
48
- let byteCount = firstEmIndex === - 1
49
- ? children . filter ( child => child . tagName . toLowerCase ( ) === 'span' ) . length
50
- : children . slice ( 0 , firstEmIndex ) . filter ( child => child . tagName . toLowerCase ( ) === 'span' ) . length ;
51
- let sizeCount = document . querySelectorAll ( "#kaggle_size span" ) . length - 1 ;
52
- if ( sizeCount < byteCount ) {
53
- let prependZeros = Array ( byteCount - sizeCount ) . fill ( '<span class="zero">0</span>' ) . join ( '' ) ;
54
- document . getElementById ( "kaggle_size" ) . innerHTML = prependZeros + wrappedSize ;
55
- } else if ( sizeCount > byteCount ) {
56
- let prependZeros = Array ( sizeCount - byteCount ) . fill ( '<span class="zero">0</span>' ) . join ( '' ) ;
57
- document . getElementById ( "kaggle_stat" ) . innerHTML = prependZeros + wrappedNumber + " bytes downloaded" ;
58
- }
47
+ // Print total bytes downloaded
48
+ const formattedNumber = total_bytes . toLocaleString ( ) ;
49
+ const wrappedNumber = Array . from ( formattedNumber ) . map ( char => ( / \d / . test ( char ) ? `<span>${ char } </span>` : `<em>${ char } </em>` ) ) . join ( '' ) ;
50
+ document . getElementById ( "kaggle_stat" ) . innerHTML = wrappedNumber + " bytes downloaded" ;
59
51
60
- } catch ( error ) {
61
- console . log ( "Failed to fetch Gist data:" , error ) ;
62
- }
52
+ // Print total dataset size
53
+ const formattedSize = formatBytes ( total_size ) ;
54
+ const wrappedSize = formattedSize . split ( / ( \s + ) / ) . map ( chunk => {
55
+ if ( / ^ \d + $ / . test ( chunk ) )
56
+ return Array . from ( chunk ) . map ( char => `<span>${ char } </span>` ) . join ( '' ) ;
57
+ else if ( / ^ \w + $ / . test ( chunk ) )
58
+ return `<span>${ chunk } </span>` ;
59
+ else
60
+ return chunk ;
61
+ } ) . join ( '' ) ;
62
+ document . getElementById ( "kaggle_size" ) . innerHTML = wrappedSize ;
63
+ document . getElementById ( "data_size" ) . innerHTML = formattedSize ;
64
+
65
+ // Extra formatting thanks matthias
66
+ let children = Array . from ( document . getElementById ( "kaggle_stat" ) . children ) ;
67
+ let firstEmIndex = children . findIndex ( child => child . tagName . toLowerCase ( ) === 'em' ) ;
68
+ let byteCount = firstEmIndex === - 1
69
+ ? children . filter ( child => child . tagName . toLowerCase ( ) === 'span' ) . length
70
+ : children . slice ( 0 , firstEmIndex ) . filter ( child => child . tagName . toLowerCase ( ) === 'span' ) . length ;
71
+ let sizeCount = document . querySelectorAll ( "#kaggle_size span" ) . length - 1 ;
72
+ if ( sizeCount < byteCount ) {
73
+ let prependZeros = Array ( byteCount - sizeCount ) . fill ( '<span class="zero">0</span>' ) . join ( '' ) ;
74
+ document . getElementById ( "kaggle_size" ) . innerHTML = prependZeros + wrappedSize ;
75
+ } else if ( sizeCount > byteCount ) {
76
+ let prependZeros = Array ( sizeCount - byteCount ) . fill ( '<span class="zero">0</span>' ) . join ( '' ) ;
77
+ document . getElementById ( "kaggle_stat" ) . innerHTML = prependZeros + wrappedNumber + " bytes downloaded" ;
78
+ }
79
+
80
+ } catch ( error ) {
81
+ console . log ( "Failed to fetch data:" , error ) ;
82
+ }
63
83
}
64
- fetchGistData ( ) ;
84
+ fetchGistData ( ) ;
0 commit comments