@@ -13,52 +13,72 @@ function formatBytes(numBytes) {
1313}
1414
1515async 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
2220
23- // Parse JSON data
24- const total_size = parseInt ( data . total_size ) ;
25- const total_bytes = parseInt ( data . total_bytes ) ;
21+ let dataURL = gistURL ;
2622
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 ) ;
3146
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" ;
5951
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+ }
6383}
64- fetchGistData ( ) ;
84+ fetchGistData ( ) ;
0 commit comments