@@ -730,6 +730,7 @@ <h2 class="aside-t">Found in</h2>
730730 < div class ="toast " id ="toast " role ="status " aria-live ="polite "> </ div >
731731 < script >
732732'use strict' ;
733+ { { /* djlint:off */ } }
733734let RAW = { } ; // catalog data
734735let ALL = [ ] ; // this fixes the ReferenceError
735736let curQ = '' ;
@@ -883,7 +884,7 @@ <h2 class="aside-t">Found in</h2>
883884 if ( ! hits . length ) { closeHAC ( ) ; return }
884885 dd . innerHTML = hits . map ( ( { c} ) => {
885886 const ini = ( c . name || '?' ) . slice ( 0 , 2 ) . toUpperCase ( ) ;
886- const lbls = ( c . source_labels || [ ] ) . slice ( 0 , 2 ) . map ( l => `<span class="lbl lbl- ${ slug ( l ) } "> ${ esc ( l ) } </span>` ) . join ( '' ) ;
887+ const lbls = ( c . source_labels || [ ] ) . slice ( 0 , 2 ) . map ( makeLbl ) . join ( '' ) ;
887888 const st = c . stars != null ?`<span style="font-size:.74rem;color:var(--subtle);flex-shrink:0">⭐ ${ fmt ( c . stars ) } </span>` :'' ;
888889 return `<div class="acitem" data-id="${ esc ( c . id ) } ">
889890 <div class="acico">${ ini } </div>
@@ -915,7 +916,7 @@ <h2 class="aside-t">Found in</h2>
915916 if ( ! hits . length ) { closeAC ( ) ; return }
916917 dd . innerHTML = hits . map ( ( { c} ) => {
917918 const ini = ( c . name || '?' ) . slice ( 0 , 2 ) . toUpperCase ( ) ;
918- const lbls = ( c . source_labels || [ ] ) . slice ( 0 , 2 ) . map ( l => `<span class="lbl lbl- ${ slug ( l ) } "> ${ esc ( l ) } </span>` ) . join ( '' ) ;
919+ const lbls = ( c . source_labels || [ ] ) . slice ( 0 , 2 ) . map ( makeLbl ) . join ( '' ) ;
919920 const st = c . stars != null ?`<span style="font-size:.74rem;color:var(--subtle);flex-shrink:0">⭐ ${ fmt ( c . stars ) } </span>` :'' ;
920921 return `<div class="acitem" data-id="${ esc ( c . id ) } ">
921922 <div class="acico">${ ini } </div>
@@ -968,7 +969,7 @@ <h2 class="aside-t">Found in</h2>
968969 document . getElementById ( 'rcount' ) . innerHTML = `Showing <strong>${ start + 1 } –${ end } </strong> of <strong>${ curRes . length } </strong> package${ curRes . length !== 1 ?'s' :'' } ` ;
969970 list . innerHTML = curRes . slice ( start , end ) . map ( c => {
970971 const ver = ltag ( c ) ;
971- const lbls = ( c . source_labels || [ ] ) . map ( l => `<span class="lbl lbl- ${ slug ( l ) } "> ${ esc ( l ) } </span>` ) . join ( '' ) ;
972+ const lbls = ( c . source_labels || [ ] ) . map ( makeLbl ) . join ( '' ) ;
972973 const added = MFS . has ( c . id ) ?`<span class="added-ind">✓ In manifest</span>` :'' ;
973974 const stars = c . stars != null ?`<span class="pstat">⭐ ${ fmt ( c . stars ) } </span>` :'' ;
974975 const upd = c . last_updated ?`<span class="padded">${ relt ( c . last_updated ) } </span>` :'' ;
@@ -1020,8 +1021,8 @@ <h2 class="aside-t">Found in</h2>
10201021 document . getElementById ( 'dName' ) . textContent = c . name ;
10211022 document . getElementById ( 'dVer' ) . textContent = ver ?ver :'' ;
10221023 document . getElementById ( 'dDesc' ) . textContent = c . description || '' ;
1023- const lbls = ( c . source_labels || [ ] ) . map ( l => `<span class="lbl lbl- ${ slug ( l ) } "> ${ esc ( l ) } </span>` ) . join ( '' ) ;
1024- document . getElementById ( 'dBadges' ) . innerHTML = lbls + `<span class="lbl lbl- ${ slug ( c . source_type ) } "> ${ esc ( c . source_type ) } </span>` ;
1024+ const lbls = ( c . source_labels || [ ] ) . map ( makeLbl ) . join ( '' ) ;
1025+ document . getElementById ( 'dBadges' ) . innerHTML = lbls + makeLbl ( c . source_type ) ;
10251026 const parts = [ ] ;
10261027 if ( c . license && c . license !== 'UNKNOWN' ) parts . push ( `<span class="pmi">⚖ ${ esc ( c . license ) } </span>` ) ;
10271028 if ( c . stars != null ) parts . push ( `<span class="pmi">⭐ ${ fmt ( c . stars ) } </span>` ) ;
@@ -1053,7 +1054,7 @@ <h2 class="aside-t">Found in</h2>
10531054 } ) ;
10541055 const aSrcs = document . getElementById ( 'aSrcs' ) ;
10551056 aSrcs . innerHTML = ( c . catalog_sources || [ ] ) . length ?( c . catalog_sources || [ ] ) . map ( cs => {
1056- const lbl = cs . label ?`<span class="lbl lbl- ${ slug ( cs . label ) } "> ${ esc ( cs . label ) } </span>` :'' ;
1057+ const lbl = cs . label ?makeLbl ( cs . label ) :'' ;
10571058 const p = cs . index_path ?`<span style="font-size:.76rem;color:var(--subtle)"> ${ esc ( cs . index_path ) } </span>` :'' ;
10581059 return `<div class="aside-src-row">${ lbl } <span>${ esc ( cs . source_name ) } ${ p } </span></div>` ;
10591060 } ) . join ( '' ) :'<span style="font-size:.82rem;color:var(--subtle)">No registry info</span>' ;
@@ -1229,18 +1230,21 @@ <h2 class="aside-t">Found in</h2>
12291230 setTimeout ( ( ) => URL . revokeObjectURL ( url ) , 10000 ) ;
12301231}
12311232
1232- { { /* djlint:off */ } }
12331233const _ESC = { '&' :'&' , '<' :'<' , '>' :'>' , '"' :'"' , "'" :''' } ;
1234- { { /* djlint:on */ } }
12351234function esc ( s ) { return String ( s || '' ) . replace ( / [ & < > " ' ] / g, c => _ESC [ c ] || c ) }
12361235function yamlQ ( s ) { return "'" + String ( s || '' ) . replace ( / ' / g, "''" ) + "'" }
12371236function slug ( s ) { return String ( s || '' ) . toLowerCase ( ) . replace ( / [ ^ a - z 0 - 9 ] / g, '-' ) . replace ( / - + / g, '-' ) . replace ( / ^ - | - $ / g, '' ) }
1237+ const _LBL_KNOWN = { 'vcpkg' :[ '#d6eaf8' , '#1a5276' ] , 'conan' :[ '#fef9e7' , '#7d6608' ] , 'npm' :[ '#fde8e4' , '#922b21' ] , 'clib' :[ '#e8d8f0' , '#4a235a' ] , 'esp' :[ '#d5f5e3' , '#1e8449' ] , 'esp-idf' :[ '#d5f5e3' , '#1e8449' ] , 'github' :[ '#eaecee' , '#2c3e50' ] , 'gitlab' :[ '#fde8f0' , '#7b241c' ] , 'svn' :[ '#fef5e7' , '#784212' ] } ;
1238+ const _LBL_PAL = [ [ '#d6eaf8' , '#1a5276' ] , [ '#fde8e4' , '#922b21' ] , [ '#d5f5e3' , '#1e8449' ] , [ '#fef9e7' , '#7d6608' ] , [ '#e8d8f0' , '#4a235a' ] , [ '#fde8f0' , '#7b241c' ] , [ '#fef5e7' , '#784212' ] , [ '#d5eaff' , '#1a4080' ] , [ '#e4f4e8' , '#1b5e33' ] , [ '#ffe4f0' , '#7b0040' ] , [ '#fff0d5' , '#7a4000' ] , [ '#e8e4ff' , '#2c007a' ] ] ;
1239+ function _lblColor ( l ) { const k = slug ( l ) ; if ( _LBL_KNOWN [ k ] ) return _LBL_KNOWN [ k ] ; let h = 0 ; for ( let i = 0 ; i < k . length ; i ++ ) h = ( h * 31 + k . charCodeAt ( i ) ) >>> 0 ; return _LBL_PAL [ h % _LBL_PAL . length ] }
1240+ function makeLbl ( l ) { const [ bg , fg ] = _lblColor ( l ) ; return `<span class="lbl" style="background:${ bg } ;color:${ fg } ">${ esc ( l ) } </span>` }
12381241function fmt ( n ) { if ( n >= 1000 ) return ( n / 1000 ) . toFixed ( 1 ) + 'k' ; return String ( n ) }
12391242function isSafeHttpUrl ( url ) { try { const u = new URL ( String ( url || '' ) ) ; return u . protocol === 'http:' || u . protocol === 'https:' ; } catch ( e ) { return false ; } }
12401243function ltag ( c ) { const tags = ( c . tags || [ ] ) . filter ( t => t . name ) ; if ( ! tags . length ) return '' ; const vp = s => String ( s ) . replace ( / ^ v / i, '' ) . split ( '.' ) . map ( p => { const n = parseInt ( p , 10 ) ; return isNaN ( n ) ?p :n } ) ; return tags . reduce ( ( b , t ) => { const bv = vp ( b . name ) , tv = vp ( t . name ) ; for ( let i = 0 ; i < Math . max ( bv . length , tv . length ) ; i ++ ) { const bi = bv [ i ] ?? 0 , ti = tv [ i ] ?? 0 ; if ( typeof bi === 'number' && typeof ti === 'number' ) { if ( bi !== ti ) return bi < ti ?t :b } else { const sc = String ( bi ) . localeCompare ( String ( ti ) ) ; if ( sc ) return sc < 0 ?t :b } } return b } ) . name }
12411244function relt ( iso ) { if ( ! iso ) return '' ; const d = new Date ( iso ) ; const diff = Date . now ( ) - d . getTime ( ) ; const days = Math . floor ( diff / 86400000 ) ; if ( days < 1 ) return 'today' ; if ( days < 7 ) return `${ days } d ago` ; if ( days < 30 ) return `${ Math . floor ( days / 7 ) } w ago` ; if ( days < 365 ) return `${ Math . floor ( days / 30 ) } mo ago` ; return `${ Math . floor ( days / 365 ) } y ago` }
12421245function cpTxt ( t ) { if ( navigator . clipboard ) return navigator . clipboard . writeText ( t ) ; return new Promise ( ( res , rej ) => { const ta = document . createElement ( 'textarea' ) ; ta . value = t ; document . body . appendChild ( ta ) ; ta . select ( ) ; try { const ok = document . execCommand ( 'copy' ) ; ok ?res ( ) :rej ( new Error ( 'execCommand copy returned false' ) ) } catch ( e ) { rej ( e ) } finally { ta . remove ( ) } } ) }
12431246function showToast ( msg ) { const t = document . getElementById ( 'toast' ) ; t . textContent = msg ; t . classList . add ( 'show' ) ; clearTimeout ( t . _t ) ; t . _t = setTimeout ( ( ) => t . classList . remove ( 'show' ) , 2200 ) }
1247+ { { /* djlint:on */ } }
12441248 </ script >
12451249 </ body >
12461250</ html >
0 commit comments