1+ const maxTagSize = 1.25
2+ const minTagSize = 0.75
3+
14function buildTagWall ( data ) {
25 const tags = { }
36
47 data . forEach ( ( element ) => {
58 element . data . tags . forEach ( ( tag ) => {
6- if ( tags [ tag ] ) { tags [ tag ] += 1 }
7- else { tags [ tag ] = 1 }
9+ if ( ! tags [ tag ] ) { tags [ tag ] = { } }
10+ if ( tags [ tag ] . count ) { tags [ tag ] . count += 1 }
11+ else { tags [ tag ] . count = 1 }
812 } )
913 } )
1014
11- delete tags . til
15+ delete tags . til // remove the 'til' tag from the list
16+
17+ // calculate size by count.
18+ const maxCount = Math . max ( ...Object . values ( tags ) . map ( ( tag ) => tag . count ) )
19+ const minCount = Math . min ( ...Object . values ( tags ) . map ( ( tag ) => tag . count ) )
20+ Object . keys ( tags ) . forEach ( ( tag ) => {
21+ const size = ( tags [ tag ] . count - minCount ) / ( maxCount - minCount ) * ( maxTagSize - minTagSize ) + minTagSize
22+ tags [ tag ] . size = `font-size: ${ size } em`
23+ } )
1224
13- // sort tags by count and then alphabetically
1425 Object . keys ( tags ) . sort ( ( a , b ) => {
15- if ( tags [ a ] === tags [ b ] ) { return a > b ? 1 : - 1 }
16- return tags [ a ] < tags [ b ] ? 1 : - 1
26+ // sort by count and then by name
27+ if ( tags [ a ] . count > tags [ b ] . count ) { return - 1 }
28+ if ( tags [ a ] . count < tags [ b ] . count ) { return 1 }
29+ if ( a < b ) { return - 1 }
30+ if ( a > b ) { return 1 }
31+ return 0
1732 } )
1833
1934 return Object . keys ( tags ) . map ( ( tag ) => {
20- // TODO: size the tags based on the count
2135 // TODO: make tags clickable to filter the entries
22- return `<code class="tag">${ tag } </code> <span class="count">${ tags [ tag ] } </span>`
36+ return `<span class="tag" style=" ${ tags [ tag ] . size } ">< code class="tag-name ">${ tag } </code> <span class="tag- count">${ tags [ tag ] . count } </span> </span>`
2337 } ) . join ( ' ' )
2438}
2539
40+
2641function getRecents ( data ) {
2742 return data . slice ( - 10 ) . reverse ( ) . map ( ( element ) => buildEntry ( element ) ) . join ( ' ' ) ;
2843}
@@ -43,7 +58,8 @@ function buildTitle(element) {
4358 return `<code>${ tag } </code>`
4459 } ) . join ( ' ' )
4560
46- const date = extractDate ( element . page . date ) || ''
61+
62+ const date = extractDate ( element . data . created ) || ''
4763
4864 return `<div>
4965 <a href="${ element . url } "><span class="til-card-title">${ element . data . title } </span></a>
@@ -102,11 +118,16 @@ function getRelated(data, current) {
102118}
103119
104120
105- function buildTimestamps ( element ) {
121+ function buildTimestamps ( data , element ) {
106122 let target = element . inputPath . substring ( 1 )
107123 target = `https://github.com/miermontoto/mier.info/tree/main${ target } `
124+
125+ // find the element in the data array
126+ let fullElement = data . find ( ( entry ) => entry . page . fileSlug === element . fileSlug )
127+ const date = extractDate ( fullElement . data . created )
128+
108129 return `
109- <div class="timestamp"> created: <time datetime="${ element . date } ">${ element . date } </time></div>
130+ <div class="timestamp"> created: <time datetime="${ date } ">${ date } </time></div>
110131 <div class="source">source: <a href="${ target } ">${ element . filePathStem } </a></div>
111132 `
112133}
0 commit comments